好的,这对任何使用过WebSocket和nodejs的人来说都很简单。我创建了一个名为ws_server.js的websocket服务器,并将其放在C:\Program Files(x86)\nodejs中,我在那里安装了nodejs框架。我启动了服务器,它正在运行,它说它正在监听端口8080。到目前为止一切都很好,我让服务器运行起来了。
现在,我只想从客户端代码连接到它,这样我就可以使用事件侦听器等来捕获事件。问题是,令人尴尬的是,我不知道使用什么URL来连接到我的WebSocket服务器。
function init() {
testWebSocket();
}
function testWebSocket() {
websocket = new WebSocket("ws://localhost:8080/"); // WHAT URL SHOULD BE USED HERE?
websocket.onopen = function(evt) { alert("OPEN") };
websocket.onclose = function(evt) { alert("CLOSE") };
websocket.onmessage = function(evt) { alert("MESSAGE") };
websocket.onerror = function(evt) { alert("ERROR") };
}
function doSend(message) {
// this would be called by user pressing a button somewhere
websocket.send(message);
alert("SENT");
}
window.addEventListener("load", init, false);
当我使用ws://localhost:8080时,触发的事件只有CLOSE和ERROR。我无法让客户端连接。我一定是遗漏了一些非常简单的东西。我是否需要在IIS中设置我的nodejs文件夹,例如,然后将其用作URL?
只是重申一下,WebSocket服务器运行良好,我只是不知道使用什么URL从客户端连接到它。
编辑:WebSocket服务器报告以下错误。客户端未请求指定的协议。
4条答案
按热度按时间vjrehmav1#
我想我已经让它的工作通过做以下。
问题是我需要指定一个协议。至少现在我得到了onopen事件......如果没有其他什么的话
z9gpfhce2#
我看到了同样的错误,整个Web服务器都瘫痪了。添加协议可以修复它,但让我想知道为什么它是这样实现的。我的意思是,一个错误的请求不应该让你的服务器瘫痪。
你一定要用try/catch来封装它,但是这里提供的示例代码https://www.npmjs.com/package/websocket(2019-08-07)没有。这个问题可以很容易地避免。
jrcvhitl3#
我只是想分享一个疯狂的问题,我可以连接到一个旧版本的第三方应用程序在一台电脑的WebSocket,但不能连接到一个较新版本的应用程序在另一台电脑。
更重要的是,即使在新的计算机与新版本的应用程序,该应用程序能够连接到WebSocket,但无论我做了什么,当我试图与我自己的代码连接,我不断得到错误消息,websocket连接失败
长话短说,他们改变了Apache配置,允许通过代理连接到WebSocket。
在旧版本中,apache配置为:
在新版本中,apache配置更改为:
不幸的是,我试图连接到
ws://localhost/socket
,而不是ws://localhost/socket/
。结果,找不到代理,连接返回错误。故事的寓意:请确保您正在尝试连接到存在的WebSocket url。
h79rfbju4#
对我来说,解决方案是将URL从ws://更改为wss://。这是因为我连接的服务器已经更新了它的安全性,现在只接受wss。