使用 RPC 的 python 流式 TCP 服务器

发布于 2024-09-06 03:48:07 字数 351 浏览 9 评论 0原文

我用 python 编写了一个小型流媒体 mp3 服务器。到目前为止,它所做的只是接受 ServerSocket 连接,并开始使用 socket.send() 将其队列中的所有 mp3 数据流式传输到请求。我已将其实现为流冰元数据中的块,因此正在播放的歌曲的名称显示在客户端中。

我想向服务器添加播放列表管理,以便我可以操作正在运行的服务器的播放列表。我有一个模糊的想法,xmlrpclib 适合这样做,但我对两件事感到困惑:

  1. 是否可能/建议在单个服务器和单个端口上集成 ICY 和 XMLRPC。

  2. 如何在流线程和播放列表之间共享状态,以及通过 xmlrpc 对其进行操作。

    如何

I have written a little streaming mp3 server in python. So far all it does is accept a ServerSocket connection, and begin streaming all mp3 data in its queue to the request using socket.send(). I have implemented this to chunk in stream icy metadata, so the name of the playing song shows up in the client.

I would like to add playlist management to the server, so that I can manipulate the playlist of the running server. I have a vague idea that xmlrpclib would be suited to doing this, but I'm confused about two things:

  1. Whether it's possible/advisable to integrate ICY and XMLRPC on a single server and a single port.

  2. How to share state between the stream thread and the playlist, and manipulation thereof via xmlrpc.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

懷念過去 2024-09-13 03:48:07

如果您使用两个单独的端口,每个端口都有自己的服务器在单独的线程中运行,那么您的初始尝试可能会更容易。然而,从长远来看,管理线程之间的同步可能是一项烦人的任务。

ICY 和 HTTP 非常相似,如果您已经在 SocketServer 之上实现了 ICY,您可能可以扩展 BaseHTTPServer.BaseHTTPRequestHandler 用于响应同一端口上的 ICY 和 HTTP 请求。查看 BaseHTTPRequestHandler.parse_request() 方法,并思考如何在子类中重写它以实现人格分裂。

另外,当您想使用这些类处理多个并发请求时,请查看 SocketServer mixin 类

Your initial attempt might be easier if you use two separate ports, each with its own server running in a separate thread. However, managing synchronization between the threads might be an annoying task in the long run.

ICY and HTTP are very similar, and if you've already implemented ICY on top of SocketServer, you could probably extend BaseHTTPServer.BaseHTTPRequestHandler to respond to both ICY and HTTP requests on the same port. Take a look at the standard library code for the BaseHTTPRequestHandler.parse_request() method, and think about how to override it in a subclass for a split personality.

Also, when you want to handle multiple concurrent requests using these classes, take a look at the SocketServer mixin classes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文