【发布时间】:2016-06-22 05:06:00
【问题描述】:
在尝试设置一个简单的 NodeJS 服务器和 Socket.io 客户端以使用 WebSockets 测试某些东西时,我偶然发现了一些愚蠢的东西。我很确定这是一件愚蠢的事情我已经做过,因为我之前使用过 NodeJS/Socket.io 并且从未遇到过这个问题。
使用下面的代码,我可以在客户端接收到来自服务器的 'tick' 事件,但服务器似乎无法接收来自客户端的 'ping' 事件。 'tick' 用于确保 server->client 正常工作,'ping' 用于测试 client->server。
使用最新的 Socket.io (1.4.6) 和 express (4.14.0)
server.js:
var express = require('express');
var app = require('express')();
var server = require('http').createServer(app);
var sio = require('socket.io')(server);
var path = require('path');
app.use(express.static(path.join(__dirname, 'public_html')));
// Socket.io
sio.on('connection', (socket) => {
// Store socket ID
var socketID = socket.conn.id;
// Log connection
console.log('Connection:', socketID);
// Ping event
socket.on('ping', (message) => {
console.log('Ping:', socketID, '-', (message || '(no message>'));
});
// Tick event
var tick = function(){
var now = new Date().getTime().toString();
socket.emit('tick', now);
}
setInterval(tick, 5000);
// Disconnect event
socket.on('disconnect', () => {
console.log('Disconnected:', socketID);
});
});
server.listen(4100, () => {
console.log('Listening on :4100');
});
index.html:
<!DOCTYPE html>
<html>
<head>
<title>Websockets Benchmark</title>
</head>
<body>
<script src="/socket.io/socket.io.js"></script>
<script>
// Socket.io
var sio = io();
// Connection event
sio.on('connect', () => {
console.log('Connected');
sio.emit('ping', 'on connect');
});
// Tick event
sio.on('tick', (time) => {
console.log('Tick', time);
});
// Error event
sio.on('error', (e) => {
console.error(e);
});
</script>
</body>
【问题讨论】:
标签: javascript node.js websocket socket.io