当前位置: 首页 > 知识库问答 >
问题:

在openshift中运行时python websocket失败

欧阳勇
2023-03-14

下面是我在虚拟机中使用的缩短代码。

from autobahn.twisted.websocket import WebSocketServerProtocol, WebSocketServerFactory, listenWS
from autobahn.twisted.resource import WebSocketResource

class MyServerProtocol(WebSocketServerProtocol):
    def onConnect(self, request):
        stuff...
    def onOpen(self):
        stuff...
    def onMessage(self,payload):
        stuff...


factory = WebSocketServerFactory(u"ws://0.0.0.0:8080")
factory.protocol = MyServerProtocol
resource = WebSocketResource(factory)

root = File(".")
root.putChild(b"ws", resource)
site = Site(root)

reactor.listenTCP(8080, site)
reactor.run()

客户端的连接部分如下:

var wsuri;
var hostname = window.document.location.hostname;
wsuri = "ws://" + hostname + ":8080/ws";

if ("WebSocket" in window) {
    sock = new WebSocket(wsuri);
} else if ("MozWebSocket" in window) {
    sock = new MozWebSocket(wsuri);
} else {
    log("Browser does not support WebSocket!");
    window.location = "http://autobahn.ws/unsupportedbrowser";
}

openshift配置如下:

Firefox can’t establish a connection to the server at ws://openshiftprovidedurl.net:8080/ws.
wscat -c ws://openshiftprovidedurl.net/ws
error: Error: unexpected server response (400)

openshift中的应用程序日志显示如下:

2018-04-03 01:14:24+0000 [-] failing WebSocket opening handshake ('missing port in HTTP Host header 'openshiftprovidedurl.net' and server runs on non-standard port 8080 (wss = False)')
2018-04-03 01:14:24+0000 [-] dropping connection to peer tcp4:173.21.2.1:38940 with abort=False: missing port in HTTP Host header 'openshiftprovidedurl.net' and server runs on non-standard port 8080 (wss = False)
2018-04-03 01:14:24+0000 [-] WebSocket connection closed: connection was closed uncleanly (missing port in HTTP Host header 'openshiftprovidedurl.net' and server runs on non-standard port 8080 (wss = False))

如有任何协助,我们将不胜感激!

共有1个答案

闻人越
2023-03-14

Graham Dumpleton一针见血地说,我修改了代码

factory = WebSocketServerFactory(u"ws://0.0.0.0:8080")

factory = WebSocketServerFactory(u"ws://0.0.0.0:8080", externalPort=80)

它纠正了这个问题。我不得不修改我的索引以指向正确的websocket,但我现在能够连接了。

 类似资料:
  • 我对Openshift Origin非常陌生。我现在正在尝试在OpenShift origin中部署docker容器的可能性。为此,我创建了一个非常简单的docker容器,它将两个数字相加并产生结果: https://github.com/abrahamjaison01/openshifttest 我在本地创建了一个docker映像,在docker hub中创建了一个公共docker映像: 我在本

  • 我在这里有一个关于在OpenShift origin上创建的项目的持久性的基本问题。使用以下命令实例化一个非常基本的设置: oc集群up--创建计算机 之后,我创建了一个项目TestProject,并从 添加到项目 - 选项。现在,当我用下面的命令关闭集群并再次启动时,我的项目(TestProject)丢失了,每次启动集群时,我只看到一个名为my project的默认项目。 oc集群停机- doc

  • 问题内容: 我有两个运行Windows Server 2012的虚拟机。一个运行Jenkins,另一个运行Jenkins的构建作业之一。作业从Subversion中检出测试代码,然后在Windows批处理脚本中运行。该测试可以编译并运行,但是会失败,并显示。这些是使用Selenium和Firefox驱动程序的TestNG测试。 如果我使用完全相同的命令并从Windows命令行运行它,则测试成功。我

  • 我面临着另一个问题。我的项目中有5个测试类(junit),它们都能够进行参数化测试。我可以用eclipse单独测试这些类,那时它工作得很好。当我通过maven(sure fire)运行它们时,它们失败了。错误消息看起来像org。朱尼特。跑步者。参数化。ParametersMethodReturnedErrorType(参数化。java:340)。请帮忙。 代码片段: 堆栈跟踪:

  • 当我在命令行中运行TestNG时,抛出异常: c:\test>java org.testng.testng testng.xml线程“main”java.lang.noClassDefounderror:com/beust/jcommander/parameterexception在java.lang.class.getDeclaredMethods0(本机方法)在java.lang.class.

  • 问题内容: 我正在运行在本地工作的脚本。但是,当我在詹金斯构建过程中运行脚本时,sed无法正常工作。 这是我验证路径正确的代码。文件在那里。 我觉得这与我的语法有关。但这在本地有效,那么我可能做错了什么? 问题答案: 从sed命令中删除和的两个单引号()之间的 空格 。通常,后缀必须立即跟在选项后面,且不能有空格。