服务器应用程序.始终打开的插座
clien-server application. Always opened socket
我有客户端服务器应用程序 - C++上的客户端(在AIX上运行,使用库),和Java上的服务器(在Win和AIX上运行,使用 java.net.,java.io.)。下一个
是应用程序结构服务器
//...
while (true)
{
final Socket s = ss.accept();
pool.execute(new Service(s));
}
// ..
服务.class从输入链中获取字节并将字节发送到 otputstream。并关闭套接字 s
克莱因特是
SendMessage(msg)
{
// ...
const int socketFD = OpenSocket();
// send bytes
// receive bytes
close(socketFD);
}
问题是下一个:我可以在客户端打开套接字吗?发送消息,接收消息,并在一段时间后发送新消息并接收新消息。没有重新打开插座?
当然可以。但是,服务器应了解预期需要多条消息,并且在客户端关闭连接之前不应终止服务。您的实现的问题在于服务是可运行的,而不是线程。如果它会在接收消息时循环,它将保持它正在运行的线程。如果使用 FixedThreadPool,则可能会出现所有池线程都耗尽的情况,下一个服务将等到前一个客户端之一断开连接。使用 CachedThreadPool 可以避免这种情况,但因此,使用的线程数等于客户端数。如果您有足够的主内存(每个线程大约使用 0.5 Mb),这不是问题。如果要节省内存,可以使用异步网络库,如Apache Netty。Java 7 实现了异步通道。
https://github.com/rfqu/df4j 是一个轻量级数据流库,其中包括一个基于 Java7 异步网络设施的包装器,以使它们更易于使用。
是的,当然。除了HTTP之外,大多数协议都使用持久连接(SMTP,POP3,FTP,ICQ等)。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 使用WinSocket客户端/服务器应用程序重复使用插座
- 服务器应用程序.始终打开的插座