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 });
这适用于多种数据传递,而不仅仅是消息。 你可以将多个事件监听器分别做不同的事情