socket
:socket
介面介於應用程式與硬體之間。對
socket
的理解可以簡化為:它是封裝了資料流(
stream
)的從機器到機器的一條軟接線,通過這條軟接線,並借助於線兩端的收發程式,網路上的機器間實現了資訊的交流與互通。分離在軟線兩端的應用程式(伺服器端程式和客戶端程式)可以通過呼叫
socket
介面來開發具有
tcp/ip
網路功能的程式應用。
作為客戶端,即要知道服務程式所在房間的房間號(
ip位址),又要知道後門的位置(埠)。這樣才能正確地進入房間。
資料編髮:
軟線建立完成後,還必須有資料傳輸的規則,這就是服務端和客戶端商量著來的事情了。資料使用什麼封裝,傳送時遵循什麼規則(收發協議)、傳輸是否採用壓縮技術和加解密技術等。將資料封裝起來,可以讓程式的設計者像操作本地檔案一樣來操作流動在網路上的資訊。不同的資料封裝方式將決定客戶端和伺服器端資料的訪問方式。編髮型別僅限於標量(基本型別)和字串物件
。複雜物件
需要我們考慮有關物件到位元組的序列化以及位元組流到物件的還原問題
。多執行緒
作為一種例程服務,必須要考慮其同時服務於多使用者的問題。這個問題的解決可以通過執行緒技術來實現,而且相當簡單。基本思路是:在伺服器內產生單一的監聽
socket
,並迴圈呼叫
accept()
等待新的軟線連線。
accept()
每返回一次,就會帶回與特定客戶有關的
socket
,將該socket
的運作安排到乙個獨立的執行緒中,這樣其服務就是針對特定客戶的了。考慮到多執行緒對共享資源訪問時的同步問題如果處理不當就會造成執行緒的不安全,必須為臨界區設定執行緒鎖。
基於tcp
的收發協議
使用socket
程式設計,必須明確客戶端與伺服器端的收發協議。以下是針對該例項定義的收發協議:
客戶端:傳送報頭
9999
,傳送使用者名稱(
string
),傳送密碼(
string
)服務端:接收報頭
9999
,接收使用者名稱和密碼,驗證登入許可權
是合法使用者:傳送報頭
9999
,傳送歡迎資訊(
string
)是非法使用者:傳送報頭
-1,傳送警告資訊(
utf)
客戶端:接收報頭
9999
,獲取歡迎資訊(
string
)
分布式 分布式鎖
本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...
分布式 分布式事務
是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...
分布式程式設計初體驗
單機環境下偽分布式集群環境搭建請參考 本文將介紹第乙個hadoop程式具體怎麼執行。執行環境為ubuntu14.04 eclipse hadoop2.2.0。2.hadoop2.2.0自帶的worldcount在 hadoop home share hadoop mapreduce sourcesh...