20

我正在尝试在一页上使用两个 websocket。这是我的代码:

var pageViewWs = new WebSocket("ws://localhost:9002/pageView");
var sessionWs = new WebSocket("ws://localhost:9002/session");

pageViewWs.onmessage = function (event) {
  alert("PageView");
};

sessionWs.onmessage = function (event) {
  alert("Session"); 
};

仅显示 PageView 警报。在服务器端,不向 /session 发出请求,只向 /pageView 发出请求。

现在,如果我切换 var pageViewWs 和 var sessionWs ,则会显示 Session 警报而不是 PageView。这不是因为它们是警报,我尝试附加到正文和 div,并且我已经逐步使用 Firebug。似乎一次只能创建一个 WebSocket,尽管在 Firebug 中 pageViewWs 和 sessionWs 的属性除了它们的 url 之外看起来是相同的。

我只在 Firefox 15.0.1 中测试过这个。是否存在某种 Websocket 限制,您一次只能运行一个?还是我的代码有问题?

4

3 回答 3

3

我相信您只能创建一个从客户端到主机上特定端口的 WebSocket 连接。您是否尝试过在不同的端口或不同的服务器上运行这两个服务?这将允许您确定限制...

于 2012-09-19T16:06:04.713 回答
3

通过同一个端口运行多个服务时,我遇到了同样的问题。因此,我创建了一个PHP 库来执行此操作。

为什么 ?

托管服务提供商的一些免费计划不允许您绑定到端口或允许您绑定到一个端口。在OpenShift Cloud Server的情况下,您只能绑定到端口 8080。因此,无法运行多个 WebSocket 服务。在这种情况下,Francium DiffSocket很有用。

您可以使用名为Francium DiffSocket的PHP 库在同一端口上运行不同的服务。

设置 Francium DiffSocket 后,您可以这样做以使用不同的服务:

var chatWS = new WebSocket("ws://ws.example.com:8000/?service=chat");
var gameWS = new WebSocket("ws://ws.example.com:8000/?service=game");

一个示例是通过单个端口运行的这些服务:

于 2016-05-30T12:31:40.170 回答
2

除了 HTTP 请求头之外,两个请求都是相同的。他们在同一个端口上访问同一个应用程序服务器。由服务器端应用程序根据发起连接的 HTTP 请求对每个连接进行不同的处理。

我已经在节点中完成了这个。你可以手动完成,但是像这样的包

简化了过程。

于 2016-10-31T08:04:55.937 回答