查看完整版本: TCP Socket 多人聊天室建置(系統資源分配問題)
頁: [1]

a7813195 發表於 2017-9-19 11:34 PM

TCP Socket 多人聊天室建置(系統資源分配問題)

各位大大您好,最近在製作一個TCP Socket Server多人聊天室的建置,
目前是連線後即新增一個執行緒去收發訊息,
但也有考慮到若是百人連線即增加了百個執行緒,
使用Server broadcast是否會造成系統上資源的問題?
若不會,那像以群組聊天室那樣通訊(百人連線),是否會造成系統上的問題呢?

如果這樣會造成問題,
另外有個想法是建置一個非同步的Socket連線,
但目前毫無頭緒,
想不到有什麼測試方法。



...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

o_g349 發表於 2017-9-21 12:18 PM

根據以下這段文章,Java 1.3 (含)之前主要還是以每個 client 一個執行緒處理
Java issues

Up through JDK 1.3, Java's standard networking libraries mostly offered the one-thread-per-client model. There was a way to do nonblocking reads, but no way to do nonblocking writes.

In May 2001, JDK 1.4 introduced the package java.nio to provide full support for nonblocking I/O (and some other goodies). See the release notes for some caveats. Try it out and give Sun feedback!

HP's java also includes a Thread Polling API.

In 2000, Matt Welsh implemented nonblocking sockets for Java; his performance benchmarks show that they have advantages over blocking sockets in servers handling many (up to 10000) connections. His class library is called java-nbio; it's part of the Sandstorm project. Benchmarks showing performance with 10000 connections are available. 在 Java 1.4 之後,Java 包含了非同步 IO,可以用 java.nio.channels.Selector 去接收 socket 的連接、讀取和寫入事件,你可以查「java socket nio」搜尋到很多例子
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

wu20022002 發表於 2017-11-26 01:14 PM

同樓上, 連線跟thread沒有絕對關係, 從channel的角度去想, 較傳統的tomcat才是一條連線一條thread.

abary 發表於 2018-1-17 02:16 AM

Java 的話用openfire吧, 不要自己幹, 不過最推的其實是erlang的ejabberd
頁: [1]