socket.IO一次只能连接一个客户端(浏览器)

我有一个使用套接字IO来连接我的服务器到客户端(http网站)的问题。

在客户端,我有一个button,当按下时,发送数据到服务器。 但是,这只适用于一个客户。

如果我有两个客户端,第一个打开http网站的人获得socket 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' }); }); 

而不是使用client.broadcast.send(something)client.send(something)使用io.emit('eventName', something) 。 另外,为了设置variablesio使用的服务器

 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 }); 

这适用于多种数据传递,而不仅仅是消息。 你可以将多个事件监听器分别做不同的事情