3

我已经为此苦苦挣扎了几天,试图到处寻找信息,但我无法解决。

基本上,我有一个 Flash 客户端应用程序和一个浏览器 - 基于 chrome 的应用程序连接到一个套接字 io - nodejs 服务实例。

如您所知,Chrome 可以通过 websockets 运行,而我的 flash 应用可以通过 flash sockets 运行。

chrome 和 node 之间一切正常,但是当我从我的 flash 应用程序进行任何交互时,这会将连接类型降级为 flash 套接字而不是 websockets,从而使 chrome web 应用程序无法从服务器读取,因为服务器开始使用闪光灯插座。基本上,当我从 Flash 进行任何交互时,chrome 不再接收任何信息。

你知道有什么方法可以通过 flash-node 在 flashsockets 中继续提供信息,而且还保证 node-chrome 通过 websockets 进行通信吗?

我已经尝试了与 socket io 连接的推荐库,您可以在 socket io 网站上找到该库;就是这个https://github.com/simb/FlashSocket.IO

我还尝试在 AS3 中使用一个使用 websockets 的库,但似乎无法与 socket.io 正确通信;就是这个https://github.com/y8/websocket-as。尝试连接时套接字 io 输出的消息是“调试 - 破坏非 socket.io 升级”

这里有一些调试代码,显示了 flashsockets 和 websocket,这是我的两个客户端应用程序试图连接到同一个套接字 io 服务器:

https://gist.github.com/4637617

非常感谢你的帮助!

4

2 回答 2

2

谢谢,经过大量的工作,我终于设法解决了这个问题。

Socket.io 有一个非常智能的实现,允许您使用命名空间和房间。

我已经通过在两个不同的命名空间中工作来解决它:一个用于浏览器,另一个用于 flash。

例子:

 var browser = io.of("/browser").on('connection', function (socket) {
     socket.on('move', function (data) {
        browser.emit("move", {"left" : data.left, "top" : data.top});
     });
 });

 io.sockets.on('connection', function (socket2) {
     socket2.on('click', function (data) {
        browser.emit("move", {"left" : 1000, "top" : 50});
    });
 });

当我单击一个按钮时,Flash 会发送“单击”,然后我会向浏览器命名空间中的所有浏览器发送一条消息。

挺有用的。

我希望这可以帮助别人!

一切顺利

于 2013-01-26T17:21:21.147 回答
1

如果您使用多个传输配置 socket.io,当客户端连接时,它将选择最佳可用传输。因此,如果一个客户端只能使用闪存,那么它将使用它,而另一个客户端可能会使用 xhr-polling。

默认情况下,您有 websocket、htmlfile、xhr-polling、jsonp-polling,但没有 flashsocket。

有关更多详细信息,请参阅https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO

于 2013-01-26T02:30:33.813 回答