cjm*_*671 1 websocket raspberry-pi
这是一个尴尬的问题,但这里有.
我正在尝试使用Raspberry Pi构建一个门解锁系统.我希望Pi保持与远程服务器的开放连接,这样我就可以测试存在(即Pi是否存活),并发送命令.我还希望减轻典型的家庭路由器NAT和动态IP问题.
我的问题是:什么协议最适合这个?
我在想的是使用类似网络套接字的东西,这样我就可以连接到像Pusher这样的服务或我自己的服务器.这个问题是我将从直接Python中完成它,因此中间没有Web浏览器.我不知道我有什么其他选择,如果有的话.
对这个问题的开放式性质表示道歉,但我不知道还能在哪里问.
小智 5
实时网络将是在Raspberry Pi和远程服务器(或任意数量的远程设备)之间传输数据的绝佳媒介.我听了Gordon Hollingworth 在API战略会议上就Raspberry Pi的教育策略发表演讲从那时起,我一直在玩一个.这是我学到的.
首先,由于Pi运行linux,您可以使用您喜欢的任何语言进行编码.我最熟悉的实时网络,PubNub,有50种语言的SDK.特别是,使用PubNub Python SDK,您可以使用此代码块订阅事件:
pubnub = Pubnub(
"demo", ## PUBLISH_KEY
"demo", ## SUBSCRIBE_KEY
None, ## SECRET_KEY
False ## SSL_ON?
)
def receive(message) :
print(message)
return True
pubnub.subscribe({
'channel' : 'hello_world',
'callback' : receive
})
Run Code Online (Sandbox Code Playgroud)
要发送消息,现在您已经定义了pubnub变量,您只需使用:
info = pubnub.publish({
'channel' : 'hello_world',
'message' : {
'some_text' : 'Hello my World'
}
})
print(info)
Run Code Online (Sandbox Code Playgroud)
这个SDK非常轻巧,易于实现(PubNub 每月最多可免费发送1条消息.)
由于您询问了不同的协议,我不妨提一下,如果您想使用更低级别的服务,您可以使用此要点中的说明将TCP数据包 直接发送到PubNub接口.简单地说,
telnet pubsub.pubnub.com 80
GET /stream/demo/a/0/10000 HTTP/1.1
Host: pubsub.pubnub.com
Run Code Online (Sandbox Code Playgroud)
与使用SDK或WebSocket解决方案相比,这显然有助于降低功耗.
另一方面,由于您熟悉Python和WebSockets,因此您始终可以使用自己的解决方案.Heroku有一篇关于使用异步回调和Redis 在他们的博客上使用Python WebSockets来启动聊天服务器的帖子.以下是将消息联合到不同客户端的代码示例:
def run(self):
"""Listens for new messages in Redis, and sends them to clients."""
for data in self.__iter_data():
for client in self.clients:
gevent.spawn(self.send, client, data)
Run Code Online (Sandbox Code Playgroud)
祝你好运,让我知道它是怎么回事!
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |