我有一个应用程序,用户有一个配置文件与软木板。
当用户在其他用户配置文件上写入某些内容时,该配置文件页面上的每个人都应该接收发出消息。
在客户端,我像这样连接到套接字服务器:
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体系结构,这将改善我目前的状况。提前感谢!
发布于 2013-10-22 14:49:51
不能将套接字连接存储在客户端。服务器维护连接,并处理心跳和房间。至于第二个问题,问题不在于事件是否应该在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() {};,这可能会加快连接的建立。
https://stackoverflow.com/questions/19518022
复制相似问题