如何从远程机器访问 websocket

Posted

技术标签:

【中文标题】如何从远程机器访问 websocket【英文标题】:How to access websocket from remote machine 【发布时间】:2015-05-22 11:24:36 【问题描述】:

我在java中创建了一个websocket服务器,glassfish服务器在8080端口托管它。websocket服务器的地址是ip:8080/EchoChamber/echo 我使用以下link 创建了这个 websocket 服务器 我的客户是一些嵌入式微控制器和我的基于 Web 的应用程序,我在其中查看结果(在 chrome IE 资源管理器中)。 我的客户端应用程序正在使用一些 java 脚本来建立与 websocket 服务器的连接:

<script type="text/javascript">
var webSocket = 
new WebSocket("ws://ip:8080/EchoChamber/echo");

webSocket.onerror = function(event) 
  onError(event)
;

webSocket.onopen = function(event) 
  onOpen(event)
;

webSocket.onmessage = function(event) 
  onMessage(event)
;

function onMessage(event) 
//display message in textboxes

问题是当我在本地主机上时,我可以在我的应用程序上查看结果,但是当我在远程桌面上时,Web 浏览器会给出远程 ip 上的页面未定义的错误。谁能告诉我如何将我的远程主机浏览器连接到 websocket 服务器。我试图从我的远程机器访问端口 ip:8080 并且我可以访问它,这意味着玻璃鱼服务器没有任何限制。是 websocket 设置了一些限制。谁能帮帮我。

【问题讨论】:

【参考方案1】:

这是一个 javascript 代码而不是 java。我相信 javascript 对跨站点脚本有限制。这就是为什么它适用于 localhost 而不适用于其他主机。我认为您可以禁用浏览器中的安全设置,它可能会起作用,但通常是被禁止的。

【讨论】:

我说客户端在java脚本上,websocket服务器是用java编写的 这就是问题所在。如果该网站在您的计算机中打开,但它试图打开一个 websocke 到另一个 IP 它将失败。网站应该托管在某个服务器上,并且 websocket 必须在同一台服务器上。 实际上 websocket 在 glassflish 服务器上,而网站在 apache 服务器上。 :(【参考方案2】:

包含 javascript 的 html 页面应该从同一个域呈现,否则浏览器安全性将不允许您连接到不同的主机(主机不提供内容或可能来自不同的域)

【讨论】:

以上是关于如何从远程机器访问 websocket的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 UCanAccess 访问远程机器上的数据库文件?

如何从远程客户端机器传输到开发团队软件崩溃?

如何从远程计算机(不是本地主机)访问 MySQL?

无法从远程机器访问 Python Flask 应用程序 [重复]

从本地网络上的远程机器访问 NodeJS 服务器显示一个空白页面

如何在docker上远程访问mariadb?