1、java socket通訊 有沒有什麼好點的框架
可以選擇Netty。Netty是基於抄Java NIO client-server的網路應用框架,使用Netty可以快速開發網路應用,例如伺服器和客戶端協議。Netty提供了一種新的方式來開發網路應用程序,這種新的方式使它很容易使用和具有很強的擴展性。Netty的內部實現是很復雜的,但是Netty提供了簡單易用的API從網路處理代碼中解耦業務邏輯。Netty是完全基於NIO實現的,所以整個Netty都是非同步的。
網路應用程序通常需要有較高的可擴展性,無論是Netty還是其他的基於Java Nio的框架,都會提供可擴展性的解決方案。Netty中一個關鍵組成部分是它的非同步特性,本片文章將討論同步(阻塞)和非同步(非阻塞)的IO來說明為什麼使用非同步代碼解決擴展性問題以及如何使用非同步。
2、android上的socket通信的開源框架有哪些
Netty是由JBOSS提供來的一個java開源自框架。Netty提供非同步的、事件驅動的網路應用程序框架和工具,用以快速開發高性能、高可靠性的網路伺服器和客戶端程序。也就是說,Netty 是一個基於NIO的客戶,伺服器端編程框架,它在socket的基礎上根據各種常用的應用協議又進一步封裝,提供更便利的介面。如果需要快速搭建一個C/S服務框架,那Netty過來用是沒錯。反過來你的情況是需要學習這個課程,你應該掌握基本的socket編程及其通信原理,所以學習時直接用socket編程比較好。也許哪一天,你靈感來了,編出一個比Netty更好的框架,一個更牛的軟體。
3、C/C++ 有哪些適合快速開發的socket伺服器框架
如果有 C++ 背景可以考慮用 Thrift,這個需要伺服器和客戶端一起使用。
如果只考慮伺服器,Go 和 NodeJS 都是不錯的選擇,看看官方的例子就已經比較清楚了。
至於 socket 連接的穩定性,主要還是在於 TCP 心跳檢測和數據重傳做的好不好,對於信道不好的情況,比如使用 3G 卡做聯網時,要每隔幾十秒就發一個沒有數據的心跳包,保證盡早檢測到斷線請求,盡早重連。伺服器端性能應該問題不大,就算設備每秒鍾都發數據只要業務不太復雜就不會遇到什麼瓶頸。
4、如何搭建websocket框架
四種框架分別實現百萬websocket常連接的服內務器容
http://blog.jobbole.com/103995/
5、ios用什麼框架做socket開發
一般使用的網路數據傳輸中一般涉及到7層,分別為物理層、數據鏈路層、網路層、傳輸層、會話層、表示層和應用層。對於程序開發人員而言能夠用到的就是傳輸層,會話層,表示層和應用層。
http協議 對應於應用層
tcp協議 對應於傳輸層
ip協議 對應於網路層
上邊是我們每次網路請求中,各個協議在每個層中的應用,下邊的層都為上一層提供了傳輸基礎。上邊三層共同構成了一次網路請求(當然還有更底下的我們不做研究的層),而Socket則是對TCP/UDP,IP協議(即傳輸和網路層)的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,我們才能使用TCP/UDP,IP協議。
那麼這時候我們就一定要了解HTTP請求和Socket之間到底是怎麼樣的一個關系呢,又該怎麼理解呢?其實Http請求就是基於TCP/IP協議的一層的Socket再封裝,只是Socket在數據的傳輸過程中數據是無法識別的內容如果想要使傳輸的數據有意義,則必須使用應用層協議,應用層協議很多,有HTTP、FTP、TELNET等等,也可以自己定義應用層協議。而Http協議就是現在使用最廣泛的應用層協議,這樣我們的才保證了我們可以在網路請求中可以自定義收到的JSON/XML格式的數據。而Http請求實際上每次本質上就是先建立一次Socket長鏈接 然後接受數據包(因為TCP協議的數據傳輸是數據流可能是多個包的 Http通過請求頭會對包進行處理和組合),當數據包全部接收完成之後,通過協議轉換成我們想要的格式返回給我們,然後關閉長鏈接,這樣的一個流程完成一次Http請求。這個時候我們就會發現一個問題,只有我們主動的給伺服器端發送請求的時候服務端才會給我們響應返回數據。而且每次網路請求又會重新開啟TCP協議中的三次握手的過程,每次使用肯定是耗時的(當然現在基於Http2.0的多次網路請求可以減少握手次數)。但是也只是在每次Http之後還是會關閉Socket而且伺服器端都不能在我們沒有請求的情況下主動給我們發送消息,這個時候我們就可以使用Socket解決這個問題了。
如果我們建立了一個Socket長鏈接,不斷開伺服器端就能和我保持通訊了,這也就是我們現在用的及時通訊軟體和視頻是直播軟體實現的原理(當然視頻直播還涉及到很多其他的知識,一直覺得那才是iOS開發中最大的難點),現在我們知道了為什麼我們有了Http還要了解Socket,那麼接下來就開始介紹Socket底層的一些實現原理,我一直覺得iOS開發如果只是知道一些三方框架如何使用,在框架使用的過程中遇到了實際的問題,我們實際上是很難有實質上的思路去解決問題的,所以很多東西我想最好先從原理上去了解。
這時候我們就要做Socket變成就需要引入幾個知識點。
1.地址
1.地址在程序中,我們如何保存一個地址呢?在中的sockaddr便是描述socket地址的結構體類型.
/** [XSI] Structure used by kernel to store most addresses.*/
struct sockaddr {
__uint8_t sa_len; /* total length */
sa_family_t sa_family; /* [XSI] address family */
char sa_data[14]; /* [XSI] addr value (actually larger) */
};
為了方便設置用語網路通信的socket地址,引入了sockaddr_in結構體(對於UNIX Domain Socket則對應sockaddr_un)
/*
* Socket address, internet style.
*/
struct sockaddr_in {
__uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;//得是網路位元組序
struct in_addr sin_addr;//in_addr存在的原因則是歷史原因,其實質是代表一個IP地址的32位整數
char sin_zero[8];//bzero之,純粹是為了兼容sockaddr
};
在實際編程的時候,經常需要將sockaddr_in強制轉換成sockaddr類型。
2.埠
在本地的進程中,每一個進程都可以通過PID來標識,對於網路上的一個計算機中的進程如何標識呢?網路中的計算機可以通過一個IP地址進行標識,一個計算機中的某個進程則可以通過一個無符號整數(埠號)來標識,所以一個網路中的進程可以通過IP地址+埠號的方式進行標識。
3網路位元組序
談網路位元組序(Endianness)之前我們先說說什麼是位元組序。位元組序又叫端序,就是指計算機中存放 多位元組數據的位元組的順序。典型的就是數據存放在內存中或者網路傳輸時的位元組的順序。常用的位元組序有大端序(big-endian),小端序(litle-endian,另還有不常見的混合序middle-endian)。不同的CPU可能會使用不同的位元組序,如X86,PDP-11等處理器為小端序,Motorola 6800,PowerPC 970等使用的是大端序。小端序是指低位元組位存放在內存地址的低端,高端序是指高位位元組存放在內存的低端。 舉個例子來說明什麼是大端序和小端序: 比如一個4位元組的整數 16進制形式為 0x12345678,最左邊是高位。
大端序
低位 > > > > 高位
12 34 56 78
小端序
低位 > > > > 高位
78 56 34 12
TCP/IP 各層協議將位元組序使用的是大端序,我們把TCP/IP協議中使用的位元組序稱之為網路位元組序。 編程的時候可以使用定義在sys/_endian.h中的相關的介面進行本地位元組序和網路位元組序的互轉。
#define ntohs(x) __DARWIN_OSSwapInt16(x) // 16位整數 網路位元組序轉主機位元組序
#define htons(x) __DARWIN_OSSwapInt16(x) // 16位整數 主機位元組序轉網路位元組序
#define ntohl(x) __DARWIN_OSSwapInt32(x) //32位整數 網路位元組序轉主機位元組序
#define htonl(x) __DARWIN_OSSwapInt32(x) //32位整數 主機位元組序轉網路位元組序
以上聲明中 n代表netwrok, h代表host ,s代表short,l代表long
如果數據是單位元組的話,則其沒有位元組序的說法了。
4.半相關和全相關
半相關(half-association)是指一個三元組 (協議,本地IP地址,本地埠),通過這個三元組就可以唯一標識一個網路中的進程,一般用於listening socket。但是實際進行通信的過程,至少需要兩個進程,且它們所使用的協議必須一致,所以一個完成的網路通信至少需要一個五元組表示(協議,本地地址,本地埠,遠端地址,遠端埠),這樣的五元組叫做全相關。
5.網路編程模型
網路存在的本質其實就是網路中個體之間的在某個領域的信息存在不對等性,所以一般情況下總有一些個體為另一些個體提供服務。提供伺服器的我們把它叫做伺服器,接受服務的叫做客戶端。所以在網路編程中,也存在伺服器端和客戶端之分。
6、bbo框架適用於java游戲socket伺服器嗎
不適合,但可以用於游戲的後台服務的分布式處理
答題不易,互相幫助,手機提問的朋友在客戶端右上角評價點滿意即可.
如果你認可我的回答,請點擊採納為滿意回答按鈕!
7、socket/tcpip框架 怎麼理解
1、UDP會丟失數據,聊天程序之所以不會丟失數據,因為它們自己實現了確認、檢版錯、權重傳機制,相當於模擬了TCP;查詢資料庫當然要用TCP。
2、非同步機制是由操作系統提供的,效率較高;從數據接收的層面上看,多線程的阻塞差不多類似於單線程的非阻塞,但是這種實現方式比較有局限性。認真閱讀關於socket的文檔或者計算機網路,就不會有不理解的地方了。
3、絕大多數情況下,伺服器和客戶端都會使用新的工作線程來交換數據。這個看具體應用。你多做幾個socket相關的項目就知道了。
4、所謂的模式是指UDP和TCP嗎?當然是TCP。當時這並不是程序員所必須關心的,因為ACCESS的客戶端驅動會處理一切網路傳輸事務,讓你就像訪問本地的ACCESS一樣。做過項目了一般不會有這類疑惑。
8、java 有什麼比較好的websocket客戶端框架
本文是我復在實踐過製程中的記錄,我的目標是使用spran-websocket,netty, undertow和node.js四種框架分別實現C1000K的伺服器,看看這幾個框架實現的難以程度,性能如何。開發語言為Scala和Javascript。
當然,談起性能,我們還必須談到每秒每個連接有多少個請求,也就是RPS數,還要考慮每條消息的大小。
一般來說,我們會選取一個百分比,比如每秒20%的連接會收發消息。我的需求是伺服器只是push,客戶端不會主動發送消息。 一般每一分鍾會為這一百萬群發一條消息。
所以實現的測試工具每個client建立60000個websocket連接,一共二十個client。實際不可能使用20台機器,我使用了兩台AWS C3.2xlarge(8核16G)伺服器作為客戶端機。每台機器10個客戶端。
四個伺服器的代碼和Client測試工具代碼可以在github上下載。 (其實不止四種框架了,現在包括Netty, Undertow, Jetty, Spray-websocket, Vert.x 和 Node.js 六種框架的實現)
9、【最新】主流JAVA框架 springmvc myts websocket 伺服器框架哪裡有?
框架官網 maven倉庫 開源社區( sourceforge)
直接到maven倉庫去下載,java開源項目比較集中
maven倉庫地版址:http://repo1.maven.org/maven2/
或者
網上自己權去看maven構建項目,maven自己會下載所有依賴包