我有一个应用程序,其中用户具有带软木板的配置文件。
当用户在其他用户个人资料上写东西时,该个人资料页面上的每个人都应该收到发射。
在客户端,我连接到套接字服务器,如下所示:
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 :(得分:0)
您无法在客户端存储套接字连接。服务器维护连接,并处理心跳和房间。至于你的第二个问题,不是 if 事件应该在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() {};
,这可能会加快建立连接的速度。