python 实现 TCPServer

2014-12-18 14:31:36 +08:00
 sbmzhcn
用Python写了一个简单的TCPServer,放到一台Linux服务器上,目前可以从设备通过TCP连接接收十六进制消息.
我的最终目的是使得TCPServer能够接收上万台设备发来的十六进制消息,然后解析并存到数据库里。
当然目前仅仅需要接收几台设备的信息,但现在遇到了一些问题:
(设备都用DTU代替,放在服务器上的脚本用DSC代替)
1、 当多个DTU向DSC建立链接并发送数据包时,需要把当前连接保存起来,并最好有一个序号,保存到dtu_list中。当该连接断开时可以从dtu_list中根据序号删除。
2、 这是一个基本的示例 https://docs.python.org/2/library/socketserver.html#SocketServer.BaseServer.RequestHandlerClass
,但实际情形比这复杂多。 在ThreadedTCPServer中能不能根据当前连接的ID,有选择的发送数据。

大家如果有这方面的编程例子,感谢能提供一个链接或者参考。
9427 次点击
所在节点    Python
29 条回复
sbmzhcn
2014-12-22 22:14:07 +08:00
@mengzhuo 再次提问,不好意思。在示例process_message 中的 process_message, 我如果直接把数据写入mysql会不会出现问题,比如性能问题?
sbmzhcn
2014-12-22 22:16:37 +08:00
class DebuggingServer(SMTPServer):
# Do something with the gathered message
def process_message(self, peer, mailfrom, rcpttos, data):
inheaders = 1
lines = data.split('\n')
print '---------- MESSAGE FOLLOWS ----------'
for line in lines:
# headers first
if inheaders and not line:
print 'X-Peer:', peer[0]
inheaders = 0
print line
print '------------ END MESSAGE ------------'

指以上代码中。
mengzhuo
2014-12-22 22:41:13 +08:00
@sbmzhcn 看你用什么Mysql驱动了
如果是gevent patch之后的话 某些Mysql驱动应该会实现移步了

性能问题是很多方面的,你先做一个能跑的版本,再慢慢调优吧
sbmzhcn
2014-12-22 23:54:39 +08:00
@mengzhuo 现在已经能跑了,各方面都测试没问题,就差最后的存储数据了。python操作mysql还不清楚哪个好,想用上面有人推荐的txmysql,不知道怎么和你这结合。你有什么推荐的吗?
sbmzhcn
2014-12-24 09:10:47 +08:00
@mengzhuo 能帮我回答下上面的问题吗,再次感谢!
mengzhuo
2014-12-24 09:31:56 +08:00
@sbmzhcn

我不用Mysql。。。。所以不知道
sbmzhcn
2014-12-24 12:49:18 +08:00
@mengzhuo 谢谢了,无论什么数据库都行的,就是存储这块。
sbmzhcn
2014-12-24 14:02:27 +08:00
@mengskysama 有这方面的代码没?
wuyadong
2014-12-30 13:25:53 +08:00
存手工写异步的tcpserver,好麻烦的说...找到一个非阻塞的TCPServer的DEMO
https://github.com/JobsDong/SimpleServer

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/154857

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX