socket.io客户端是否可以在本地发出事件
Can the socket.io client emit events locally?
是否可以使用socket.io将事件调度到客户端而不发送到服务器?类似于:
socket.emitLocally('some event', data);
以下是我询问的原因:
目前,我的服务器向所有套接字发送事件。
io.sockets.emit()
虽然这样做效果很好,但用户交互和服务器响应之间可能存在延迟。
这就是为什么我更喜欢在服务器端使用广播,并在广播客户端中直接处理事情。
socket.broadcast.emit()
客户端基于angular.js,模块之间互不了解。我无法直接访问负责更新客户端的代码。我必须使用某种事件调度服务,将其注入到相关模块中。
由于这基本上就是我现在用socket.io做的事情,我想知道我是否不能简单地使用他们的系统来做这件事。
感谢您的意见或建议!
这可以在函数Emitter.prototype.emit.上的socket.io客户端代码中完成
事件保存在前缀为$
的socket._callbacks
上,因此例如"connected"
将在_callbacks
下作为"$connected"
。
您可以使用复制上述功能的行为
// You can use internal (e.g. disconnected) or custom events (e.g. ChatMessage).
var event = "MyEvent";
// Set your args exactly as in your socket.io server emit.
// Note that they will be used on an apply so they must be within an array.
var args = [1, 2, 3];
if(socket._callbacks) { // If the socket has callbacks
var callbacks = socket._callbacks['$' + event]; // Load the callback event
if (callbacks) {
callbacks = callbacks.slice(0);
for (var i = 0, len = callbacks.length; i < len; ++i)
callbacks[i].apply(socket, args);
} // Otherwise no calls
}
在上面的示例中,将使用参数1、2、3调用"MyEvent"的回调。
关于如何在实际连接中使用此功能的另一个示例:
io.on('connection', function (socket) {
socket.on("getSingleUpdate", function(id, data){
alert("Event #"+id+" data "+data);
});
function emitLocalEvent(event/*, arg1, arg2, etc.*/) {
if(socket._callbacks) {
var args = [].slice.call(arguments, 1),
callbacks = socket._callbacks['$' + event];
if (callbacks) {
callbacks = callbacks.slice(0);
for (var i = 0, len = callbacks.length; i < len; ++i)
callbacks[i].apply(socket, args);
}
}
}
// Emitting fake events
emitLocalEvent("getSingleUpdate", 1, "Hello");
emitLocalEvent("getSingleUpdate", 2, "World!");
// You can even receive an array of events via socket.io...
socket.on("getMultipleEvents", function(eventArray) {
for(var i in eventArray)
emitLocalEvent.apply(null, eventArray[i]);
});
});
假设您使用在客户端捕获事件
io.on("name",callback);
你可以直接打电话给
callback();
我希望我能帮忙
相关文章:
- 点击启动弹出事件未显示
- 如何在Ol3弹出窗口中添加用javascript创建的按钮上的点击事件
- 单击事件打开两个弹出菜单
- 如何准确地找出引发事件的原因
- 我可以在FullCalendar中设置事件ClickLimit弹出窗口的样式吗
- 信息窗口谷歌地图点击事件给出错误
- 从父级触发弹出窗口中的事件
- D3.js:如何在svg上移动鼠标时创建弹出事件
- 萨特利泽关闭弹出事件
- 如何使用流的排出事件.在节点.js中可写
- 如何在高图表中查找鼠标出事件的系列名称
- jQuery列表中每个产品的基于悬停的弹出事件
- 无法抛出事件
- 鼠标悬停和鼠标移出事件是否不匹配?
- 谷歌地图折线滑出事件
- 鼠标悬停/出事件时奇怪的动画行为
- 使用EDGE.JS了解c#和NODE之间的基本事件IO
- JavaScript对话框弹出事件等待OK被按下
- JQuery的可拉出事件不触发,有时可拖动与光标
- 弹出事件处理程序