基于TCP实现多人聊天,遇到线程不够用的现象

如果要用TCP协议建立一个一百人的聊天室,使用线程池处理客户端的消息,有一个客户端连接就把这个客户端加入任务队列中,再使用线程池中的线程处理客户端与服务端的消息发送与显示,那么在一百个人同时在线发送消息的时候是不是要在线程池中开启100个线程?

或者有其他办法吗?

谢谢各位大神指导一下!

2个回答

菜鸟一个,只发表一个个人看法,不是真实解决方案:这种情况难道不是 服务端只有一个监听接收还有一个推送个客户端列表消息的线程么,客户端也只有一个发送消息给服务端接收和一个接收服务端消息的线程

首先,这是一个 C/S 模型的应用,一百个人同时在线,是有一百个客户端,但是只有一个服务端,服务端是 Socket 监听方的,如果这 100 个人同时发送消息给服务端,
那么,服务端交给工作线程去处理,而工作线程数一般不会等于同时在线人数的,可能会小很多,那么就会有排队机制。
线程池管理的机制是可以动态扩容的,如果线程数过少,就动态新建,直到达到max 配置;如果闲置过多,则减少,直到到达 max 。
C 应用有线程池管理的库函数的吧,Java 是有的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
TCP传输 多人聊天
一个简单的多人聊天:服务端:/* 1、用 ServerSocket 创建服务器,指定端口 2、接收客户端连接,阻塞式等待 3、连接好了之后, 使用输出流发送数据到套接字(一块公共区域) */ public class MyTCPService { public static List<MyChannel> allChannelList = new ArrayList<>...
基于线程的tcp聊天服务器
基于线程的tcp聊天服务器可以支持多个tcp客户端的链接
基于IOCP的多人聊天实现?
我测试一个IOCP类,这类开2个工作线程,可以方便的客户与服务器机通讯,但都是1对1通讯,我想做个多人聊天的,一个人发送数据到服务器,服务器再发送给其他人,学习一下IOCP技术,各位谁这方面有经验,讨论讨论。rn是不是客户连接到服务器时,保存他的SOCKET到全局变量大数组里。然后有人发送数据时,把他发的数据,通过一个循环发送给其他人。rnSOCKET[MAXNUMBER]rnFOR(INT I=0;I
基于Qt实现的多人聊天
基于Qt实现的多人聊天。一个服务器对应多个客户端。服务器可以对新加进来的客户端进行监听,然后给每个客户端提示信息。此外还有互发消息功能。先在服务器创建连接进行监听。客户端填写用户名进入聊天室后建立连接便可互发消息。
Tcp多人聊天C#,Unity实现
C#模拟服务器,Unity模拟客户端 效果图: 思路:客户端连接服务器发送上线消息,服务器记录所有user,然后广播给已经在线的玩家,同时发送所有玩家的名字给上线的用户,实现同步好友列表,这里用的是PopList制作的用户列表,更新显示上线消息的,这用的是TextList(NGUI制作的UI),在客户端异步发送环节,并没有在messagecenter中写派发发送消息的方法,因为懒呗,只写了
用Java的TCP套接字实现多人聊天
废话不多说,直接开搞: 先创建一个服务端: package interWebWriterEven2; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; /** * 服务端 * @author * */ public class ServiceT { static ...
基于UDP的多人聊天
这是一个用MFC做的有界面的基于UDP的多人聊天系统,原创,一个课设成果
基于socket 多人聊天
基于socket多人聊天可以选择点对点聊天服务端监控聊天
基于socket通信的多人聊天
不多说绝对好用,基于socket的通信,一步到位
Linux,Tcp多人聊天服务端
Linux,Centos6.7,多人聊天工具服务端,Tcp协议实现。
MFC之TCP通信之多人聊天
采用MFC、使用TCP协议、实现多人聊天。包括服务器和客户端,支持多客户端。
基于VC++的TCP实现聊天
基于VC++的TCP实现聊天 不错的网络编程实例
基于TCP的多人聊天工具
客户端(两个线程) 1、一个用于发消息 2、一个用于接消息服务端:(多线程) 主线程用于接受连接请求,并依次分配给子线程。 子线程:1、接受用户登录信息并足保存给文件 2、接受用户聊天信息并转发给所有其他用户 细节:send函数发送失败处理。不足:第一个连接服务器的会出现putty 用户下线时没有提示,send和receive消息不及时#inc
C#实现多人聊天
使用OMCS语音视频框架构建,直接把OMCS服务端拿过来用;
聊天系统,实现多人聊天
这是用java编写的一个模拟qq的聊天系统,可以实现多人聊天功能,希望给你提供一些帮助。。。
socket 实现多人聊天
本次实验利用TCP/IP, 语言环境为 C/C++ 利用套接字Socket编程,以及线程处理, 实现Server/CLient 之间多人的聊天系统的基本功能。
websocket实现多人聊天
简单websocket实现在线群聊功能 1、通过登录获取每个用户的昵称,在发送消息前加“昵称说:” 2、通过websocket推送到前台页面聊天消息
基于Java SE的多人聊天
基于Java SE的多人聊天 能多人私聊 Swing 版本,有全部源码
基于VUE多人聊天项目
项目背景 公司平台要做一个通讯系统,本来是java 来做的后面改前端+PHP来做,所以就用VUE来做这个了。 github github地址 新人求star 技术栈 vue-axios vuex websocket sass css3 等... 已经完成进度 整体结构已经完成 好友列表完成 好友添加拒绝完成 好友...
flex 基于red5的多人聊天
基于red5的多人聊天,使用了sharedobject,此例子仅用于对不了解sharedobject的人做一个入门的例子
基于VC的多人聊天器
大家下载下去后可以看一下.不是相当的好,但是也还算可以.用来借鉴一下吧
基于TCP聊天
我编完基于TCP聊天能在本机上聊天,但是不能到别的别的电脑上用,在我的电脑上运行服务器和一个客户端,在别的电脑上再运行一个客户端,但是在别的电脑上的客户端不能连上来,在本机上就能运行多个客户端聊天,为什么?请高手帮忙
基于TCP协议的聊天
本系统实现了基于TCP协议的聊天
基于TCP的局域网聊天
这是一个基于tcp的局域网聊天客户端。里面是一个集成服务器跟客户端的两个vs2008解决方案
基于dos的tcp聊天
使用c++编写的tcp聊天工具,功能比较简单适合初学者
带有界面的基于TCP通信的多人聊天代码
这是一个学习TCP的简单例子,支持多人通信,还带界面,非常适合初学者参考,希望对你有用
java实现多人聊天(类似于QQ聊天)
java实现多人聊天(类似于QQ聊天)
go语言实现聊天服务器(多人聊天)
用go语言实现一个server作中转群发消息,多个客户端聊天 1)服务器开启,等待来自客户端的连接,把每一个客户端存储在map中 2)客户端连接服务器,给自己取一个别名,存储在服务器 3)服务器群发消息,通知在线的客户端有新的加入 4)客户端发消息,服务器解析协议,群发给每一个客户端 5)客户端下线 server // server project main.go package ...
基于TCP/IP 的Java 简易多人聊天器
这是基于TCP协议网上聊天程序。主要分为两个部分,一部分是服务器,一部分是客户端。两者结合,实现了基本的局域网多人聊天功能。对于程序设计语言,选择了JAVA语言。JAVA程序语言自带了强大的网络功能设计包,而且具有跨平台性,这无疑可以简化很多工作,节省很多时间。为了聊天数据的可靠性,TCP/IP协议无疑是一个很好的选择。为了实现即时通信,引入了多线程技术,从而实现了通信的即时性和并发性。
C# TCP网络通信示例:多人聊天发文件
该资源包含客户端,服务器, 用户注册到数据库(可自行裁剪该功能),通过TCP 实现聊天,发文件,可以多人同时聊天。代码有完整的注释,是完整的项目。
C#Socket网络通信实现多人聊天
简单的用C#来实现多人聊天,用到了线程、Socket、并发等技术。适合初学者浏览,大神勿喷
Java网络编程—实现多人聊天
网络编程—实现多人聊天 ChatWithSocket1 JFrame mainPanel bPanel mainPanel namelabel(JLabel) nametext (JTextField) passwordlabel (JLabel) passwordtext (JPasswordField) JPanel mainPanel = new JPanel()...
UDP实现局域网多人聊天
1.布局 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height=
基于CSocket的TCP多人聊天程序
基于CSocket的TCP多人聊天程序,对理解TCP的socket的通信很有用
ajax实现简单的多人聊天
原理:简单来说就是利用ajax的异步,ajax每隔一段时间会从后台获取数据而不刷新页面。 步骤:1。数据库里建两张表,一张用户表,一张消息表 isGet表示消息是否被读 2.使用java web做后台,主要使用hibernate和struts2框架,xml数据格式。 3.下面给出核心jsp代码: friend.jsp: %@taglib prefix="c" uri="ht
如何实现同时多人聊天?
今天写了一个简单的聊天程序,但只能是一对一,且每人只能讲一句话后等对方回答才能再讲.现在想实现:1,能讲多句话,像QQ一样随时收发;2,能多人讲话,每一人都能接收其它所有人的回答? --是不是要用到多线程啊?rn 今天的简单程序如下:rn1.Client:rn#include //Clientrn#includern#includernvoid main()rnrn WORD wVersionRequested;rn WSADATA wsaData;rn int err;rnrn wVersionRequested = MAKEWORD(1,1);rnrn err=WSAStartup(wVersionRequested,&wsaData);rn if(err !=0)rn return;rn rnrn if(LOBYTE(wsaData.wVersion) !=1 || HIBYTE(wsaData.wVersion) !=1)rn WSACleanup();rn return;rn rnrn SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);rnrn SOCKADDR_IN addrSrv;rn addrSrv.sin_addr.S_un.S_addr = inet_addr("192.168.1.101");rn addrSrv.sin_family=AF_INET;rn addrSrv.sin_port=htons(6000);rn rn connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));rnrn char recvBuf[100],sendBuf[100];rn recv(sockClient,recvBuf,100,0);rn printf("SrvInformation:%s\n",recvBuf);rn while(1)rn rn printf("Client Says:");rn gets(sendBuf);rn if(!strcmp("quit",sendBuf))rn printf("End Chat!");rn strcpy(sendBuf,"Client already quit!");rn send(sockClient,sendBuf,strlen(sendBuf)+1,0);rn closesocket(sockClient);rn break;rn rn send(sockClient,sendBuf,strlen(sendBuf)+1,0);rnrn recv(sockClient,recvBuf,100,0);rn printf("Srv Response:%s\n",recvBuf);rn //closesocket(sockClient);rn rn WSACleanup();rnrnrn2.Srverce:rn#includern#includern#includernvoid main()rnrn WORD wVersionRequested;rn WSADATA wsaData;rn int err;rnrn wVersionRequested = MAKEWORD(1,1);rnrn err = WSAStartup(wVersionRequested,&wsaData);rn if(err !=0)rn return;rn rnrn if(LOBYTE(wsaData.wVersion) !=1 || HIBYTE(wsaData.wVersion) !=1)rn WSACleanup();rn return;rn rnrn SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);rnrn SOCKADDR_IN addrSrv;rn addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);rn addrSrv.sin_family=AF_INET;rn addrSrv.sin_port=htons(6000);rn bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));rnrn listen(sockSrv,5);rnrn SOCKADDR_IN addrClient;rn int len=sizeof(SOCKADDR);rnrnrn // char InputStr[100];rn SOCKET sockConn = accept(sockSrv,(SOCKADDR *)&addrClient,&len);rn char sendBuf[100];rn sprintf(sendBuf,"Welcome %s call in xiaoma's space!",inet_ntoa(addrClient.sin_addr));rn send(sockConn,sendBuf,strlen(sendBuf)+1,0);rn while(1)rn rn char recvBuf[100];rn recv(sockConn,recvBuf,100,0);rn printf("Client Response:%s\n",recvBuf);rnrn printf("Srv Says:");rn gets(sendBuf);rn if(!strcmp("quit",sendBuf))rn printf("End Chat!");rn strcpy(sendBuf,"Srv already quit!");rn send(sockConn,sendBuf,strlen(sendBuf)+1,0); rn closesocket(sockConn);rn break;rn rn send(sockConn,sendBuf,strlen(sendBuf)+1,0); rn rn WSACleanup();rnrn
socket如何实现多人聊天
我写的一个server 一个client ,就是实现运行多个client,在一个client输入消息,然后消息发给服务器,服务器再回发给所有的client 代码如下,怎么实现不了呢,希望高手帮忙rnserverrnrn import java.net.*; rn import java.io.*; rn import java.util.*; rn rn public class ServerSocketDemo rn rn public static void main(String[] args) throws Exception rn rn ArrayList list=new ArrayList(); rn ServerSocket ss=new ServerSocket(8189); rn rn while(true) rn rn Socket s=ss.accept(); rn list.add(s); rn new ReverseDemo(s,list); rn rn // ss.close(); rn rn rn class ReverseDemo extends Thread rn rn BufferedReader in=null; rn PrintWriter out=null; rn String str="abc"; rn ArrayList list; rn Socket s; rn rn public ReverseDemo(Socket s,ArrayList list) rn rn this.list=list; rn this.s=s; rn this.start(); rn rn public void run() rn rn rn try rn rn InputStream inStream = s.getInputStream();rn OutputStream outStream = s.getOutputStream();rn Scanner in = new Scanner(inStream); rn rn PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);rn System.out.println(s.getInetAddress().getHostAddress()+" connected-------");rn out.println("连接成功!");rn Scanner a=new Scanner(System.in);rn rn while(true) rn rnrn str=in.nextLine(); rn // StringBuffer sb=new StringBuffer(str); rn // str=sb.reverse().toString(); rn //System.out.println(str); rn Iterator iterator=list.iterator(); rn while(iterator.hasNext()) rn rn PrintWriter o=new PrintWriter( rn new BufferedWriter( rn new OutputStreamWriter( rn ((Socket)(iterator.next())).getOutputStream())),true); rn o.println(str); rn rn rn rn // in.close(); rn // out.close(); rn // s.close(); rn rn catch (Exception ex) rn rn ex.printStackTrace(); rn rn rn rn rnrnclientrnrn/**rn @version 1.20 2004-08-03rn @author Cay Horstmannrn*/rnrnimport java.io.*;rnimport java.net.*;rnimport java.util.*;rnrn/**rn This program makes a socket connection to the atomic clockrn in Boulder, Colorado, and prints the time that the rn server sends.rn*/rnpublic class SocketTestrn rn public static void main(String[] args)rn rn tryrn rn Socket s = new Socket("localhost", 8189);rn tryrn rn InputStream inStream = s.getInputStream();rn OutputStream outStream=s.getOutputStream();rn Scanner in = new Scanner(inStream);rn Scanner a=new Scanner(System.in);rnrn rn PrintWriter out = new PrintWriter(outStream, true /* autoFlush */);rnrn boolean done=false;rn while (!done)rn rnrn String line = in.nextLine();rn System.out.println("服务器发送的信息为:"+line);rnrn if(a.hasNextLine())rn rn String b=a.nextLine();rn out.println(b);rn if (b.trim().equals("BYE"))rn done = true;rn rn rn //else continue;rn rn rn finallyrn rn s.close();rn rn rn catch (IOException e)rn rn e.printStackTrace();rn rn rnrn
Socket通信实现多人聊天应用
套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
JAVA实现socket多人聊天
基于socket实现的聊天室小程序,用户之间可以相互对话,可以群聊,也可以私聊。编译器用的是eclipse
WebSocket实现多人实时聊天
chat.html:                使用WebSocket通信              // 创建WebSocket对象         var webSocket = new WebSocket("ws://127.0.0.1:8888/WebSocket/websocket/chat");         var sendMsg = functio
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数