【发布时间】:2018-06-09 07:00:17
【问题描述】:
在运行以下代码时(理论上它应该每分钟发送一个值)
from __future__ import print_function
from twisted.internet.ssl import CertificateOptions
options = CertificateOptions()
from os import environ
from twisted.internet.defer import inlineCallbacks
from twisted.internet import reactor
from autobahn.twisted.wamp import ApplicationSession, ApplicationRunner
from autobahn import wamp
from datetime import datetime, timedelta
import xlwings as wb
import time
import xlwings as wb
class Component(ApplicationSession):
"""
An application component that publishes an event every second.
"""
@inlineCallbacks
def onJoin(self, details):
print("session attached")
while True:
try:
wb.Book(r'C:\Users\Administrator\Desktop\Datasets\test_feed.xlsx')
e = wb.Range('A2').value
b = wb.Range('C2').value
c = wb.Range('E2').value
except Exception:
print("----Waiting for RTD server response----")
time.sleep(1)
try:
epoch = datetime(now.year, now.month, now.day)
result = epoch + timedelta(days=c)
result = result.replace(microsecond=0, second=0)
if result > now:
now = result
print("Stock", e, "Time", now, "Price", b)
self.publish(u'com.myapp.ma', b)
except Exception:
print("-----Waiting1 for RTD server response----")
time.sleep(1)
def onDisconnect(self):
print("disconnected")
reactor.stop()
if __name__ == '__main__':
runner = ApplicationRunner(
environ.get("AUTOBAHN_DEMO_ROUTER", u"ws://127.0.0.1:8080/ws"),
u"crossbardemo")
runner.run(Component)
返回如下错误
2017-12-28T18:43:52+0100 [Router 1604] dropping connection to peer tcp4:127.0.0.1:61531 with abort=True: WebSocket ping timeout (peer did not respond with pong in time)
2017-12-28T18:43:52+0100 [Router 1604] session "8526139172223346" left realm "crossbardemo"
我尝试解决这个问题的方法:
我)
from twisted.internet.ssl import CertificateOptions options = CertificateOptions() if __name__ == '__main__': runner = ApplicationRunner( environ.get("AUTOBAHN_DEMO_ROUTER", u"ws://127.0.0.1:8080/ws"), u"crossbardemo", ssl=options) runner.run(Component)
二)
if __name__ == '__main__': runner = ApplicationRunner( environ.get("AUTOBAHN_DEMO_ROUTER", u"ws://127.0.0.1:8080/ws"), u"crossbardemo", ) runner.run(Component, auto_reconnect=True)
三)
注册编辑
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.0\客户端] "DisabledByDefault"=dword:00000000 “启用”=dword:00000001
四)
安装证书模块(pip install certifi)设置SSL_CERT_FILE,比如 导出 SSL_CERT_FILE="$(python -m certifi)"
仍然是同样的错误。我在 Windows 10 上运行,带有交叉开关演示路由器、高速公路和扭曲。
路由器配置链接:
另外,下面的示例代码工作正常:
counter = 100
while True:
print("publish: com.myapp.ma", counter)
self.publish(u'com.myapp.ma', counter)
counter += 100
yield sleep(30)
【问题讨论】:
-
您没有到服务器的路由或服务器没有运行。首先从 cmd.exe >Pin IP 让 ping 正常工作。不要使用 127.0.0.1(环回),因为大多数计算机未配置为使用环回。您必须修改 PC 上的主机文件才能使环回工作。而是使用您计算机的 IP 地址。
-
@jdweng 尝试了您的解决方案,不幸的是没有成功。得到下一个错误:WebSocket 打开握手失败('Unsupported HTTP version ('HTTP/1.0')')
-
@Jean-PaulCalderone 完成。
-
现在您实际上是在连接到服务器,而在您没有连接之前。在 HTTP/1.0 之前从未见过错误。 HTTP 1) 1.0 有两个版本:Stream 2) 1.1 Chunk。通常网页是向后兼容的,因此 1.1 与 1.0 一起使用,但 1.0 并不总是与 1.1 一起使用。这是我第一次看到服务器不接受 1.0。我在发布的代码中看不到任何会迫使您的客户进入 1.0 的内容。您请求中的 http 标头与服务器不兼容。通常我建议使用像wireshark或fiddler这样的嗅探器来帮助隔离问题。
标签: python ssl wamp twisted autobahn