2013-10-22 71 views
0

我有一个应用程序,其中用户具有软木板的配置文件。Socket.io发送消息到某些插座(体系结构)

当用户在其他用户配置文件上写入内容时,该配置文件页面上的每个人都应该接收到该发送。


在客户端我连接到插座服务器是这样的:

window.onload = function() { 
    var socket = io.connect("https://10.94.30.134:8080"); 
    // ... 
}; 

注意的是,client.js负载和每次访问我profile.html连接。我无法想象这是一个好方法。


在服务器端,我使用rooms来确定用户当前位于哪个配置文件页面。

sio.on("connection", function(socket){ 
    socket.join(socket.handshake.session.last_visited_profile); 
    // ... 
    socket.on("send-corkboard-message", function(data) { // ... 
    socket.on("send-chat-message", function(data) { // ... 
}); 

目前的方法有效,但我认为还有很多需要改进的地方。我也遇到了问题,用我的移动设备进行测试。他们需要大约5-10秒才能连接到套接字服务器。 (这就是为什么我想将套接字连接存储在客户端的全局位置会更好。)如果是这样,我没有机会让套接字连接到客房,我宁愿在我的路由或客户端中执行此操作喜欢订阅事件?

的是它拥有所有socket.io事件("send-corkboard-message", "send-chat-message")内connection事件的好方法吗?

也许你可以帮助我,或者将我联系到一些socket.io架构,以改善我目前的状况。提前致谢!

回答

0

您不能在客户端存储套接字连接。服务器负责维护连接,并处理心跳和房间。至于你的第二个问题,这不是如果事件应该在connection处理程序,而是你把它们放在该处理程序。

例如,如果我们有一个处理程序:

io.sockets.on('connection', function(socket) { 
    socket.emit('event', data); 
}); 

socket对象在线处理程序中定义。因此,您不能将事件附加到它之外。

至于你的架构,你应该避免向不需要数据的客户端发送数据。因此,如果你有做或不需要某些数据,你可以创建房间,并有一个客户端订阅某个房间的连接的客户端整组:

io.sockets.on('connection', function(socket) { 
    socket.on('subscribe', function(room) { 
    socket.join(room); 
    }); 
    socket.on('unsubscribe', function(room) { 
    socket.leave(room); 
    }); 
}); 

然后在客户端:

var socket = io.connect('/'); 
socket.emit('subscribe', 'room1'); 

另请注意,您不需要等待DOM载入以创建Socket.IO连接。所以你不需要window.onload = function() {};,这可能会加速建立连接。

+0

谢谢!当我最终在每个站点请求的连接处理程序中出现时,我还可以在服务器上的连接处理程序中“订阅”,就像我在上面的帖子中所述的那样? – user1772306

+0

这是一个问题或陈述? – hexacyanide

+0

我想就此发表意见,是的。 – user1772306