❶ java socketioclient 怎麼獲取數據
php有可用的websocket庫,不需要php-fpm。
目前比較成熟的有swoole(swoole.com),和workman(workman.net)
swoole是c寫的php擴展, 效率比nodejs還要高,workman是純php實現,兩者都號稱可以實現並發百萬TCP連接。
給你個例子:
這個要通過cmd運行的 具體帶的參數有點忘記了
<?php
error_reporting(E_ALL);
set_time_limit(0);
ob_implicit_flush();
//創建一個socket連接 設置參數 綁定 監聽 並且返回
$master = WebSocket("localhost",12345);
//標示是否已經進行過握手了
$is_shaked = false;
//是否已經關閉
$is_closed = true;
//將socket變為一個可用的socket
while(true){
//如果是關閉狀態並且是沒有握手的話 則創建一個可用的socket(貌似第二個條件可以去除)
if($is_closed && !$is_shaked){
if(($sock = socket_accept($master)) < 0){
echo "socket_accept() failed: reason: " . socket_strerror($sock) . "\n";
}
//將關閉狀態修改為false
$is_closed = false;
}
//開始進行數據處理
process($sock);
}
//處理請求的函數
function process($socket){
//先從獲取到全局變數
global $is_closed, $is_shaked;
//從socket中獲取數據
$buffer = socket_read($socket,2048);
//如果buffer返回值為false並且已經握手的話 則斷開連接
if(!$buffer && $is_shaked){
disconnect($socket);
}else{
//如果沒有握手的話則握手 並且修改握手狀態
if($is_shaked == false){
$return_str = dohandshake($buffer);
$is_shaked = true;
}else{
//如果已經握手的話則送入deal函數中進行相應處理
$data_str = decode($buffer); //解析出來的從前端送來的內容
console($data_str);
$return_str = encode(deal($socket, $data_str));
//$return_str = encode($data_str);
}
//將應該返回的字元串寫入socket返回
socket_write($socket,$return_str,strlen($return_str));
}
}
function deal($socket, $msgObj){
$obj = json_decode($msgObj);
foreach($obj as $key=>$value){
if($key == 'close'){
disconnect($socket);
console('close success');
return 'close success';
}else if($key == 'msg'){
console($value."\n");
return $value;
}
}
}
❷ Java NIO和IO的區別
Java
NIO和IO的主要區別如下:
1.NIO
的創建目的是為了讓
Java
程序員可以實現高速
I/O
而無需編寫自定義的本機代碼。NIO
將最耗時的
I/O
操作(即填充和提取緩沖區)轉移回操作系統,因而可以極大地提高速度。傳統的IO操作屬於阻塞型,嚴重影響程序的運行速度。
2,。流與塊的比較。原來的
I/O
庫(在
java.io.*中)
與
NIO
最重要的區別是數據打包和傳輸的方式。正如前面提到的,原來的
I/O
以流的方式處理數據,而
NIO
以塊的方式處理數據。
面向流
的
I/O
系統一次一個位元組地處理數據。一個輸入流產生一個位元組的數據,一個輸出流消費一個位元組的數據。為流式數據創建過濾器非常容易。鏈接幾個過濾器,以便每個過濾器只負責單個復雜處理機制的一部分,這樣也是相對簡單的。不利的一面是,面向流的
I/O
通常相當慢。
3.一個
面向塊
的
I/O
系統以塊的形式處理數據。每一個操作都在一步中產生或者消費一個數據塊。按塊處理數據比按(流式的)位元組處理數據要快得多。但是面向塊的
I/O
缺少一些面向流的
I/O
所具有的優雅性和簡單性。