Websocket 为硬件设备维护与远程服务的连接的最佳方式?

Websocket 为硬件设备维护与远程服务的连接的最佳方式?,websocket,raspberry-pi,Websocket,Raspberry Pi,这是一个有点尴尬的问题,但问题来了 我正试图建立一个门解锁系统使用树莓皮。我希望Pi保持与远程服务器的开放连接,这样我就可以测试存在性(即Pi是否处于活动状态)并向其发送命令。我还想缓解典型的家庭路由器NAT和动态IP问题 我的问题是:什么协议最适合这种情况 我当时的想法是使用web套接字之类的东西,这将允许我连接到Pusher或我自己的服务器之类的服务。问题是,我将从纯Python中执行此操作,因此在这两者之间没有web浏览器。我不确定我还有什么其他选择,如果有的话 对于这个问题的开放性,我深

这是一个有点尴尬的问题,但问题来了

我正试图建立一个门解锁系统使用树莓皮。我希望Pi保持与远程服务器的开放连接,这样我就可以测试存在性(即Pi是否处于活动状态)并向其发送命令。我还想缓解典型的家庭路由器NAT和动态IP问题

我的问题是:什么协议最适合这种情况

我当时的想法是使用web套接字之类的东西,这将允许我连接到Pusher或我自己的服务器之类的服务。问题是,我将从纯Python中执行此操作,因此在这两者之间没有web浏览器。我不确定我还有什么其他选择,如果有的话


对于这个问题的开放性,我深表歉意,但我不知道还有什么地方可以问。

实时网络将是在您的Raspberry Pi和远程服务器(或任何数量的远程设备)之间中继数据的绝佳媒介。我听了give,从那以后我一直在玩give。这是我学到的

首先,由于Pi运行的是linux,因此您可以用任何喜欢的语言编写代码。我最熟悉的实时网络是PubNub。特别是,使用,您可以使用以下代码块订阅事件:

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 
})
要发送消息,现在已经定义了
pubnub
变量,只需使用:

info = pubnub.publish({
    'channel' : 'hello_world',
    'message' : {
        'some_text' : 'Hello my World'
    }
})
print(info)
这个SDK非常轻量级,易于实现(PubNub也是)

既然您询问了不同的协议,我不妨提一下,如果您想使用更低级别的服务,您可以发送TCP数据包。简而言之

telnet pubsub.pubnub.com 80

GET /stream/demo/a/0/10000 HTTP/1.1
Host: pubsub.pubnub.com
与使用SDK或WebSocket解决方案相比,这显然有助于降低功耗

另一方面,由于您熟悉Python和WebSockets,因此始终可以推出自己的解决方案。Heroku已经开始使用异步回调和Redis。下面是将消息联合到不同客户端的代码示例:

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)

祝你好运,让我知道进展如何

实时网络将是在您的Raspberry Pi和远程服务器(或任何数量的远程设备)之间传递数据的绝佳媒介。我听了give,从那时起我一直在玩give。这是我学到的

首先,由于Pi运行的是linux,因此您可以用任何喜欢的语言编写代码。我最熟悉的实时网络是PubNub。特别是,使用,您可以使用以下代码块订阅事件:

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 
})
要发送消息,现在已经定义了
pubnub
变量,只需使用:

info = pubnub.publish({
    'channel' : 'hello_world',
    'message' : {
        'some_text' : 'Hello my World'
    }
})
print(info)
这个SDK非常轻量级,易于实现(PubNub也是)

既然您询问了不同的协议,我不妨提一下,如果您想使用更低级别的服务,您可以发送TCP数据包。简而言之

telnet pubsub.pubnub.com 80

GET /stream/demo/a/0/10000 HTTP/1.1
Host: pubsub.pubnub.com
与使用SDK或WebSocket解决方案相比,这显然有助于降低功耗

另一方面,由于您熟悉Python和WebSockets,因此始终可以推出自己的解决方案。Heroku已经开始使用异步回调和Redis。下面是将消息联合到不同客户端的代码示例:

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)

祝你好运,让我知道进展如何

哦,哇。多么奇妙的回答!非常感谢!这给了我很多研究的机会!谢谢!:)哦,哇。多么奇妙的回答!非常感谢!这给了我很多研究的机会!谢谢!:)