首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >采用乐山LWM2M演示服务器的SSE

采用乐山LWM2M演示服务器的SSE
EN

Stack Overflow用户
提问于 2020-06-12 20:04:43
回答 1查看 263关注 0票数 0

我正在尝试做一个与乐山演示服务器交互的http api。我试图在LWM2M中处理观察,但我需要使用http处理通知。我发现乐山使用SSE通知。因此,我尝试使用request和sseclient在python中实现sse客户端。

这是我的代码:

代码语言:javascript
复制
    response= requests.post(url_request , "format=TLV" , stream= True)    
    client = sseclient.SSEClient(response)
    for event in client.events():
        print(json.loads(event.data))

我试图运行我的脚本,但似乎流没有打开,它立即关闭,而不等待服务器的回答,即使在默认情况下,请求为HTTP下的TCP连接实现keep_alive,并且流为True。

有人知道为什么吗?

EN

回答 1

Stack Overflow用户

发布于 2020-06-16 16:41:11

阅读sseclient文档,正确使用SSEClient的方法似乎是:

代码语言:javascript
复制
from sseclient import SSEClient
messages = SSEClient('http://example.com/sse_stream/')
for msg in messages:
    do_something_useful(msg)

阅读乐山Github上的answer,乐山服务器演示的流URL似乎是http://your.leshan.server.org/event?ep=your_device_endpoint_name

所以我试了一下:

代码语言:javascript
复制
from sseclient import SSEClient
messages = SSEClient('http://localhost:8080/event?ep=my_device')
for msg in messages:
    print (msg.event, msg.data)

它对我很有效,?!观察乐山客户端Demo的温度实例,得到这样的结果:

代码语言:javascript
复制
(u'NOTIFICATION', u'{"ep":"my_device","res":"/3303/0","val":{"id":0,"resources":[{"id":5601,"value":-18.9},{"id":5602,"value":31.2},{"id":5700,"value":-18.4},{"id":5701,"value":"cel"}]}}')
(u'COAPLOG', u'{"timestamp":1592296453808,"incoming":true,"type":"CON","code":"POST","mId":29886,"token":"889372029F81C124","options":"Uri-Path: \\"rd\\", \\"reWfKIgPYD\\"","ep":"my_device"}')
(u'COAPLOG', u'{"timestamp":1592296453809,"incoming":false,"type":"ACK","code":"2.04","mId":29886,"token":"889372029F81C124","ep":"my_device"}')
(u'UPDATED', u'{"registration":{"endpoint":"my_device","registrationId":"reWfKIgPYD","registrationDate":"2020-06-16T10:02:25+02:00","lastUpdate":"2020-06-16T10:34:13+02:00","address":"127.0.0.1:44400","lwM2mVersion":"1.0","lifetime":300,"bindingMode":"U","rootPath":"/","objectLinks":[{"url":"/","attributes":{"rt":"\\"oma.lwm2m\\""}},{"url":"/1/0","attributes":{}},{"url":"/3/0","attributes":{}},{"url":"/6/0","attributes":{}},{"url":"/3303/0","attributes":{}}],"secure":false,"additionalRegistrationAttributes":{}},"update":{"registrationId":"reWfKIgPYD","identity":{"peerAddress":{}},"additionalAttributes":{}}}')
(u'COAPLOG', u'{"timestamp":1592296455150,"incoming":true,"type":"NON","code":"2.05","mId":29887,"token":"3998C5DE2588F835","options":"Content-Format: \\"application/vnd.oma.lwm2m+tlv\\" - Observe: 2979","payload":"Hex:e3164563656ce8164408c03199999999999ae815e108c032e66666666666e815e208403f333333333333","ep":"my_device"}')

如果您只对通知感兴趣,只需添加一个if msg.event == 'NOTIFICATION':块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62343940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档