- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 WebSocket 时遇到了一个奇怪的问题。当我打开一个新的套接字时,我让服务器和客户端互相发送握手消息。但是,该代码似乎仅有时会执行。
服务器代码(ruby):
# Set up the websocket server on port 8080
EventMachine::WebSocket.start(:host => "localhost", :port => 8080, :secure => false) do |ws|
ws.onopen do
ws.send "WebSocket opened on port 8080."
end
ws.onmessage do |msg|
puts msg
end
ws.onclose do
puts "WebSocket closed."
end
end
客户端代码(javascript):
connection.onopen = function() {
connection.send("Ping!");
};
connection.onerror = function() {
console.log("WebSocket error.");
};
connection.onmessage = function(e) {
console.log("Server: " + e.data);
};
刷新后服务器端的控制台输出,每次等待几秒钟:
WebSocket closed.
WebSocket closed.
WebSocket closed.
Ping!
WebSocket closed.
WebSocket closed.
WebSocket closed.
WebSocket closed.
Ping!
WebSocket closed.
WebSocket closed.
每次“Ping!”发布后,客户端还会收到发给它的握手消息。所以失败是双方的——当它起作用时,双方都会收到他们的消息。
这可能是什么原因造成的?
最佳答案
这可能是 EventMachine::WebSocket
的问题吗?
我想知道是否所有的连接关闭都是websocket连接。也许您的浏览器也尝试使用 Http 访问该页面?
是否有可能在 Websocket 响应“Ping”之前关闭连接?
您可以尝试使用不同的服务器端解决方案来检查这是否是问题所在。
例如,您可以使用 Plezi测试客户端并收集更多信息。即(在irb
中):
require 'plezi'
class TestController
def index
puts "Got HTTP request"
"Hello World"
end
def on_open
puts "Websocket Opened."
write "Websocket Opened."
end
def on_message data
puts "Got: #{data}"
write "pong"
end
def on_close
puts "Websocket Closed."
end
end
route '/', TestController
# if using `irb`, use:
exit # to start server
祝你好运。
附注默认端口为 3000。
如果需要,您可以使用:
Plezi.port = 8080
或者使用 -p
参数运行脚本(如果不使用 irb
,则省略 exit
指令):
$ ruby ./server.rb -p 8080
关于javascript - WebSocket onopen - 有时仅发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34441269/
不久前,我为我的一个电子表格编写了一个脚本,它使用可安装的触发器 onOpen 来启动 SpreadsheetApp.getUi 函数。 该函数如下所示: function addMenu() {
大家好,我试图在我的谷歌表格每次打开时显示一个侧边栏。我正在使用 onOpen 函数并调用 html 页面,但它没有执行。当我手动运行该函数时,它可以工作,但是当打开谷歌工作表时它不会自行执行。这是我
我正在使用 XSockets 3.x(最新)。 我已经设置了一个 Controller : public class NotificationsController : XSocketControll
我在使用 WebSocket 时遇到了一个奇怪的问题。当我打开一个新的套接字时,我让服务器和客户端互相发送握手消息。但是,该代码似乎仅有时会执行。 服务器代码(ruby): # Set up the
我在电子表格的脚本编辑器中编写了一个函数,该函数旨在关注包含当前日期的单元格。一般来说,当函数由菜单项触发时它会起作用,但加载电子表格后它不会聚焦在任何单元格上。 function onOpen()
我目前正在编写一个聊天应用程序。到目前为止,用户可以互相发送消息,我可以将消息存储在我的数据库中。现在,当用户打开页面向另一个用户发送消息时,我想在我的 onOpen 函数中显示存储在数据库中的消息。
在 .Net 中,我如何监控文件是否已被其他程序访问(打开)?我在 FileSystemWatcher 中看不到 OnOpened 事件,所以我认为它不能那样做。还有其他方法吗?这在 Windows
我在 javascript 中使用 WebSocket。 WebSocket 需要 url 作为构造函数参数并立即尝试连接。我只能在构造它之后设置onopen方法。 所以,如果 WebSocket 在
paper-dialog 是否有“onOpen”事件?我想知道对话框何时完全“打开”和“关闭”,主要是为了在对话框完成其打开动画时更改内容。 以前in Polymer 0.5 one can list
我正在使用 Angular 4 和 Material 制作一个网络应用程序。我正在使用 Material “Sidenav”组件。如果 sidenav 打开或关闭,我想触发一个事件。通过向按钮的 cl
我正在尝试学习 WebSockets,并且我已经在 Node 中创建了一个 websocket 服务器,现在正在研究浏览器实现。我已经使用名为 Smart WebSocket Client 的 chr
我试图让一段代码在电子表格打开时工作。我添加了 onOpen 脚本,将脚本触发器设置为“当电子表格打开时”,然后等待......什么也没有发生。我做错了什么? 该脚本基本上根据单元格的值将一行从一张纸
我正在使用 materializecss ,那是 sideNav 初始化,但是 onOpen 属性不起作用。 $('.button-collapse').sideNav({
每当我尝试使用此 JS 代码连接到我的计算机上的 WebSocket 服务器时,我总是收到错误消息: $(document).ready(function () { var ws; t
此代码片段在打开工作表时创建了一个自定义菜单,如预期的那样: function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMen
有没有一种方法可以将参数添加到将添加到 Google 电子表格文档的脚本中心菜单中的函数?这是正常的 onOpen 方法。 function onOpen() { var sheet = Spre
Google Apps Script 中的内置 onOpen 触发器仅在用户 时运行具有编辑权限打开电子表格或文档。我正在开发一个电子表格,其中只有开发人员具有编辑权限,所有其他用户必须具有仅查看权限
我收到以下错误: 无法在“WebSocket”上执行“发送”:仍处于 CONNECTING 状态。在我发送消息之前,是否有一个事件可以检查以确保套接字完全连接。 我的代码如下: thi
我的功能包括向文档添加菜单和toast。我已经验证触发器(onOpen)也已设置。它仅在用户进入“工具”、“脚本管理器”、“运行”时才起作用。我们有太多具有太多背景的用户,因此无法期望知道如何做到这一
我无法在打开电子表格时运行我的脚本。我已手动设置触发器see 。授权范围也已设置。 该代码旨在从工作表中的表中获取一些联系人信息,创建一个联系人,然后将该联系人添加到表中指定的电子邮件列表中。有一个功
我是一名优秀的程序员,十分优秀!