摘要:代碼實(shí)戰(zhàn)啟動(dòng)類服務(wù)啟動(dòng)類啟動(dòng)類線程監(jiān)聽端口服務(wù)類監(jiān)聽端口主服務(wù)監(jiān)聽端口服務(wù)端啟動(dòng)成功,端口服務(wù)端啟動(dòng)失敗線程模式,防止注釋啟動(dòng)客戶端接受服務(wù)端異??蛻舳私尤氡O(jiān)聽類客戶端接入監(jiān)聽類數(shù)據(jù)連接值新客戶端接入對客戶端的業(yè)務(wù)處理,接收并重寫回去客戶
代碼實(shí)戰(zhàn) ServerBoot啟動(dòng)類
package com.example.demo.server; /** * @author MySelf * @create 2018/9/29 * @desc 服務(wù)啟動(dòng)類 **/ public class ServerBoot { private static final int PORT = 8000; /** * 啟動(dòng)Server類線程 * @param args */ public static void main(String[] args) { Server server = new Server(PORT); server.start(); } }Server監(jiān)聽端口服務(wù)類
package com.example.demo.server; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /** * @author MySelf * @create 2018/9/29 * @desc Server監(jiān)聽端口主服務(wù) **/ public class Server { private ServerSocket serverSocket; /** * 監(jiān)聽端口 * @param port */ public Server(int port){ try { this.serverSocket = new ServerSocket(port); System.out.println("服務(wù)端啟動(dòng)成功,端口:"+port); }catch (IOException e){ System.out.println("服務(wù)端啟動(dòng)失敗"); } } /** * 線程模式,防止注釋 */ public void start(){ new Thread(new Runnable() { @Override public void run() { doStart(); } }).start(); } /** * 啟動(dòng)客戶端接受 */ private void doStart() { while (true){ try { Socket client = serverSocket.accept(); new ClientHandler(client).start(); }catch (IOException e){ System.out.println("服務(wù)端異常"); } } } }ClientHandler客戶端接入監(jiān)聽類
package com.example.demo.server; import java.io.IOException; import java.io.InputStream; import java.net.Socket; /** * @author MySelf * @create 2018/9/29 * @desc 客戶端接入監(jiān)聽類 **/ public class ClientHandler { /** 數(shù)據(jù)連接值 */ public static final int MAX_DATA_LEN = 1024; private final Socket socket; public ClientHandler(Socket socket){ this.socket = socket; } public void start(){ System.out.println("新客戶端接入"); new Thread(new Runnable() { @Override public void run() { doStart(); } }).start(); } /** * 對客戶端的業(yè)務(wù)處理,接收并重寫回去 */ private void doStart(){ try { InputStream inputStream = socket.getInputStream(); while (true){ byte[] data = new byte[MAX_DATA_LEN]; int len; while((len = inputStream.read(data)) != -1){ String message = new String(data,0,len); System.out.println("客戶端傳來消息:"+message); socket.getOutputStream().write(data); } } }catch (IOException e){ e.printStackTrace(); } } }Client客戶端啟動(dòng)類
package com.example.demo.client; import java.io.IOException; import java.net.Socket; /** * @author MySelf * @create 2018/9/29 * @desc 客戶端啟動(dòng)類 **/ public class Client { private static final String HOST = "127.0.0.1"; private static final int PORT = 8000; private static final int SLEEP_TIME = 5000; public static void main(String[] args) throws IOException { final Socket socket = new Socket(HOST,PORT); /** * 客戶端啟動(dòng),定時(shí)向服務(wù)端發(fā)送數(shù)據(jù) */ new Thread(new Runnable() { @Override public void run() { System.out.println("客戶端啟動(dòng)成功!"); while (true){ try { String message = "hello world"; System.out.println("客戶端發(fā)送數(shù)據(jù):"+message); socket.getOutputStream().write(message.getBytes()); }catch (Exception e){ System.out.println("寫數(shù)據(jù)出錯(cuò)!"); } sleep(); } } }).start(); } private static void sleep() { try { Thread.sleep(SLEEP_TIME); } catch (InterruptedException e) { e.printStackTrace(); } } }相關(guān)實(shí)戰(zhàn)
GitHub項(xiàng)目:基于Netty4與SpringBoot,聊天室WebSocket(文字圖片)、Iot物聯(lián)網(wǎng)-TCP/IP協(xié)議單片機(jī)通信,異步存儲(chǔ)聊天數(shù)據(jù)
如果本文對你有所幫助,歡迎關(guān)注技術(shù)公眾號。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/77348.html
摘要:下文如無特殊聲明將使用進(jìn)程同時(shí)表示進(jìn)程線程。收到數(shù)據(jù)后服務(wù)器程序進(jìn)行處理然后使用向客戶端發(fā)送響應(yīng)?,F(xiàn)在各種高并發(fā)異步的服務(wù)器程序都是基于實(shí)現(xiàn)的,比如。 并發(fā) IO 問題一直是服務(wù)器端編程中的技術(shù)難題,從最早的同步阻塞直接 Fork 進(jìn)程,到 Worker 進(jìn)程池/線程池,到現(xiàn)在的異步IO、協(xié)程。PHP 程序員因?yàn)橛袕?qiáng)大的 LAMP 框架,對這類底層方面的知識(shí)知之甚少,本文目的就是詳細(xì)介...
摘要:子進(jìn)程啟動(dòng)后監(jiān)控維護(hù)區(qū)。每來一個(gè)新的連接都會(huì)觸發(fā)新的事件,這些事件送給內(nèi)的狀態(tài)機(jī)來處理。大部分的邏輯上都有這樣的狀態(tài)機(jī),只是實(shí)現(xiàn)方式不一樣。另外通過進(jìn)程綁定技術(shù)可以進(jìn)一步減少上下文切換和失效等系統(tǒng)開銷。 Nginx在web開發(fā)者眼中就是高并發(fā)高性能的代名詞,其基于事件的架構(gòu)也被眾多開發(fā)者效仿。我從Nginx的網(wǎng)站找到一篇技術(shù)文章將Nginx是怎樣實(shí)現(xiàn)的,文章是Nginx的產(chǎn)品老大Owe...
摘要:對端,通過增加內(nèi)存修改最大文件描述符個(gè)數(shù)等參數(shù),單機(jī)最大并發(fā)連接數(shù)超過萬甚至上百萬是沒問題的,國外公司在產(chǎn)品環(huán)境中已做到萬并發(fā) [TOC] 前言 曾幾何時(shí)我們還在尋求網(wǎng)絡(luò)編程中C10K問題的解決方案,但是現(xiàn)在從硬件和操作系統(tǒng)支持來看單臺(tái)服務(wù)器支持上萬并發(fā)連接已經(jīng)沒有多少挑戰(zhàn)性了。 我們先假設(shè)單臺(tái)服務(wù)器最多只能支持萬級并發(fā)連接,其實(shí)對絕大多數(shù)應(yīng)用來說已經(jīng)遠(yuǎn)遠(yuǎn)足夠了,但是對于一些擁有很大用...
摘要:背景當(dāng)下視頻直播如此紅火,打造一個(gè)在線直播間涉及到哪些技術(shù)呢視頻直播由主播的直播端以及觀眾的觀看端組成。保持心跳斷開重連快速搭建在線直播間按前文所述,搭建直播間有非常多的細(xì)節(jié)需要考慮,包括采集推流分發(fā)播放體驗(yàn)優(yōu)化聊天室性能調(diào)優(yōu)等。 背景 當(dāng)下視頻直播如此紅火,打造一個(gè)在線直播間涉及到哪些技術(shù)呢? 視頻直播由主播的直播端以及觀眾的觀看端組成。一個(gè)簡單的觀看端最起碼應(yīng)包含播放器以及聊天室。...
閱讀 3784·2023-04-26 02:24
閱讀 1072·2023-04-25 14:47
閱讀 2770·2021-11-24 11:16
閱讀 1991·2021-11-24 09:38
閱讀 1754·2021-11-18 10:07
閱讀 2223·2021-09-22 15:49
閱讀 1733·2019-08-30 15:55
閱讀 1042·2019-08-26 13:38