1

我目前正在构建一个聊天服务器(meebo 风格)。

架构是这样的。

  1. libpurple上的Bitlbee位于主机B上。它是数据中心上的一个微不足道的服务器。
  2. 用户通过 Host A上的 web 服务器(就像 meebo)与 bitlbee 通信。此 Web 服务器的后端维护聊天会话。它只是将用户命令转换为正确的 bitlbee comamnd 并发送回主机A

这里最重要的部分是主机A将部署在嵌入式 Linux 中。

我有2 个问题

  1. 为了保持聊天会话持久,我正在考虑使用。因为它更容易创建具有持久连接的实时应用程序。但我怀疑它是否在这样的平台上受支持。
  2. 如果我使用 C 而不是 node.js(我没有使用任何 Web 服务器),我可以通过libirc与主机A上的 irc 服务器通信。但是如何在 C 中实现所有 Web 服务器功能(如会话、url/cookie/post 数据解析等)?

另外,如果您认为我的方法是错误的或者有更好的方法,请告诉我如何改进这个架构?

注意:这不是高容量聊天服务器。

4

3 回答 3

2

如果在嵌入式平台上构建 V8/Node.js 是令人望而却步的,那么下一个最好的办法是采用 Node 的事件循环和平台层 ( libuv ) 和 HTTP 解析器 ( http-parser ),它们都是用 C 编写的并将它们用作一个起点。这些是用于构建 Node.js 的相同库,因此它们经过了实战测试,将为您提供所需的性能特征。

Node.js 的作者 Ryan Dahl 准确地演示了如何使用 libuv 和 http-parser 在 C 中构建异步 Web 服务器

于 2012-07-18T16:43:57.057 回答
2

在 Bitlbee 和基于 Web 的 IRC 客户端之间放置一个 ZNC 服务器。Bitlbee 会认为用户从未注销过,ZNC 可以保持积压的消息,直到用户再次与 Web 客户端连接。

于 2012-12-13T01:58:27.180 回答
1

如果这是您的选择,我会尝试使用 node.js,它是什么嵌入式系统?因为知道这会更有帮助。此外,node.js 的另一个优点是它确实构建了会话处理,但如果您想在 C 中执行此操作,请尝试查看是否可以在嵌入式设备上运行 sqlite 包装器来存储会话信息。

但是,如果可能的话,坚持在嵌入式设备上做更少的工作,重新发明很多东西或者不得不为你的设备处理编译问题感觉很糟糕。

于 2012-07-10T19:51:09.620 回答