【问题标题】:C++ server/client networkingC++ 服务器/客户端网络
【发布时间】:2016-01-05 12:53:54
【问题描述】:
我正在开发一个项目,该项目将包括一个服务器和一个客户端组件,它们将通过 TCP/IP 发送/接收请求/信息。服务器组件将使用 C++ 开发,我将使用 boost.asio 库。客户端组件将是一个 excel 插件,将在 Visual Basic 中开发。我有几个一般性问题,请注意,我不希望在这里得到任何具体的答复,而是希望听到一些概念,以便我可以专注于。
我的问题如下。
服务端和客户端会用不同的语言开发,两种开发语言之间的socket通信有什么需要担心的吗?
我希望应用程序具有通过与 LDAP 系统集成的登录/身份验证机制。有没有可以用于此目的的 c++ 库? (如boost.asio 用于 TCP)
有没有什么概念可以推荐c++中的用户会话管理
作为我的应用程序的一部分,需要将数据从服务器传输到客户端,反之亦然。这些数据有时可能像数百到数千行和数百列。通过套接字传输此类数据的最佳方式是什么?数组对此有好处吗?
我知道我的问题非常高级和基本,但您的回答将为我指明正确的方向,并帮助我专注于正确的概念。
提前致谢。
【问题讨论】:
标签:
c++
sockets
boost
tcp
ldap
【解决方案1】:
- 服务端和客户端会用不同的语言开发,有什么需要担心两种开发语言之间的socket通信吗?
不是真的,只要你有一个明确定义的电汇格式。要么使用现有的,如 HTTP/JSON,要么自己明确定义。当接口有点复杂时,可以考虑使用CORBA或ICE之类的东西。
- 我希望应用程序具有通过与 LDAP 系统集成的登录/身份验证机制。有没有可以用于此目的的 c++ 库? (如用于 TCP 的 boost.asio)
OpenLDAP 有一个 C++ API。我没有这方面的经验,所以这里没有建议或警告。
- 有没有什么概念可以建议用 c++ 进行用户会话管理
这取决于你需要什么。最简单的方法是指向按年龄排序的会话对象的共享指针向量,但是当进程重新启动时,这些会话将全部无效。 memcached 中的会话在进程重新启动后仍然存在。如果您想在机器重启后幸存下来,我更喜欢关系数据库或文件中的会话数据。
- 作为我的应用程序的一部分,需要将数据从服务器传输到客户端,反之亦然。这些数据有时可能像数百到数千行和数百列。通过套接字传输此类数据的最佳方式是什么?数组适合这个吗?
您可以为每个对象使用一种简单的格式,然后简单地流式传输这些对象。例如。 CSV 或 JSON。当您的大部分信息还不是文本时,还要考虑二进制固定格式。当然,什么是最好的取决于数据的类型。