我遇到使用套接字IO将我的服务器连接到客户端(http网站)的问题。
在客户端上,我有一个按钮,按下后,将数据发送到服务器。但是,这仅适用于一个客户端。
如果我有两个客户端,第一个打开http网站的人获得套接字IO连接,而第二个人可以打开该页面,但无法向服务器发送任何数据。
在客户端:
var socket = new io.connect('ServerIP:8090');
socket.on('message', function(obj){
if ('buffer' in obj){
//ignore this
} else message(obj);
});
在服务器端:
var io = io.listen(server)
, buffer = [];
io.on('connection', function(client)
{
client.send({ buffer: buffer });
client.broadcast.send({ announcement: client.sessionId + ' connected' });
chatGuests.push(client);
client.on('message', function(message){
var msg = { message: [client.sessionId, message] };
buffer.push(msg);
if (buffer.length > 15) buffer.shift();
client.broadcast.send(msg);
});
client.on('disconnect', function(){
client.broadcast.send({ announcement: client.sessionId + ' disconnected' });
});
答案 0 :(得分:0)
而不是使用client.broadcast.send(something)
和client.send(something)
使用io.emit('eventName', something)
。此外,使用变量io
使用
var socket = require('socket.io');
var http = require('http');
var express = require('express');
var app = express();
var server = http.createServer(app);
var io = socket.listen(server);
然后在您的代码之后:
server.listen(8090);
这允许您使用node.js模块express,它允许客户端和服务器之间的额外通信(但不要求您重写socket.io代码)。
对于您的客户端代码,而不是使用:
socket.on('message', function(obj){
//Do something
});
使用:
socket.on('eventName', function(something){
//Do something
});
这适用于多种数据传递,而不仅仅是消息。你可以为每个事件监听器做不同的事情