日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

discard python_Netty入门教程(一) 实现DISCARD服务

發布時間:2025/3/15 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 discard python_Netty入门教程(一) 实现DISCARD服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

官方那個給出的介紹是:Netty是由JBOSS提供的一個java開源框架。Netty提供異步的、事件驅動的網絡應用程序框架和工具,用以快速開發高性能、高可靠性的網絡服務器和客戶端程序。然后我們簡單理解一下,這玩意就是個程序,干什么的?netty是封裝java socket noi的。 類似的功能是 apache的mina。

使用Netty實現Socket丟棄服務

相對于Tomcat這種Web Server(顧名思義主要是提供Web協議相關的服務的),Netty是一個Network Server,是處于Web Server更下層的網絡框架,也就是說你可以使用Netty模仿Tomcat做一個提供HTTP服務的Web容器。其實一個好使的處理Socket的東西

實現丟棄服務

這里插一下,就是我們的的通信是建立在一定的協議之上的,就比如我們常用的Web工程,前臺(瀏覽器)發送一個請求,后臺做出相應返回相應的結果,這個SOCKET通信的過程亦是如此。

在netty官方指南里面有講,世上最簡單的協議不是'Hello, World!' 而是 DISCARD(拋棄服務)。這個協議將會拋棄任何收到的數據,而不響應。就是你客戶端發送消息,好,發送過去了,服務器也收到了,但是拋棄了。

說白了,就是你發一條消息給我,我收到了,僅此而已,不做任何響應。下面我們看看大致的步驟。

創建項目,添加Netty 依賴

實現丟棄服務

運行服務

使用Python進行測試

創建項目,添加Netty 依賴

使用IDEA創建一個普通項目,然后添加jar包或者直接創建一個maven項目也行。

在Maven中搜索netty-all 即可 地址是 http://mvnrepository.com/artifact/io.netty/netty-all 建議選擇5.0.0以上的版本。

或者直接創建Maven項目,引入依賴如下

io.netty

netty-all

5.0.0.Alpha2

實現丟棄服務

package com.company;

import io.netty.buffer.ByteBuf;

import io.netty.channel.ChannelHandlerAdapter;

import io.netty.channel.ChannelHandlerContext;

import io.netty.util.CharsetUtil;

import io.netty.util.ReferenceCountUtil;

/**

* 本文件由周濤創建,位于com.company包下

* 創建時間2018/4/20 11:46

* 郵箱:zhoutao@xiaodouwangluo.com

* 作用:實現丟棄服務

*

* @author tao

*/

public class DiscardServerHandle extends ChannelHandlerAdapter {

/**

* 接收到SOCKET的時候會調用此方法

* @param ctx

* @param msg

* @throws Exception

*/

@Override

public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

try {

//獲取到接收的內容,并且實現

ByteBuf in = (ByteBuf) msg;

String message = in.toString(CharsetUtil.UTF_8);

System.out.println(message);

} finally {

ReferenceCountUtil.release(msg);

}

}

/**

* 有新的連接加入的時候

* @param ctx

* @throws Exception

*/

@Override

public void handlerAdded(ChannelHandlerContext ctx) throws Exception {

System.out.println("新增Channel ,ChannelId = " + ctx.channel().id());

}

/**

* 有連接斷開被移除的時候調用

* @param ctx

* @throws Exception

*/

@Override

public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {

System.out.println("移除Channel ,ChannelId = " + ctx.channel().id());

}

/**

* 發生異常的時候調用

* @param ctx

* @param cause

* @throws Exception

*/

@Override

public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {

cause.printStackTrace();

ctx.close();

}

}

運行服務

package com.company;

import io.netty.bootstrap.ServerBootstrap;

import io.netty.channel.ChannelFuture;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.ChannelOption;

import io.netty.channel.EventLoopGroup;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioServerSocketChannel;

/**

* 本文件由周濤創建,位于com.company包下

* 創建時間2018/4/20 11:46

* 郵箱:zhoutao@xiaodouwangluo.com

* 作用:創建運行服務

*

* @author tao

*/

public class DiscardServer {

private int port;

public DiscardServer(int port) {

this.port = port;

}

public void run() throws InterruptedException {

EventLoopGroup boos = new NioEventLoopGroup();

EventLoopGroup worker = new NioEventLoopGroup();

System.out.println("準備運行在端口:" + String.valueOf(this.port));

try {

ServerBootstrap serverBootstrap = new ServerBootstrap();

serverBootstrap.group(boos, worker)

.channel(NioServerSocketChannel.class)

.option(ChannelOption.SO_BACKLOG, 128)

.childHandler(new ChannelInitializer() {

@Override

protected void initChannel(SocketChannel socketChannel) throws Exception {

socketChannel.pipeline().addLast(new DiscardServerHandle());

}

});

ChannelFuture sync = serverBootstrap.bind(port).sync();

sync.channel().closeFuture().sync();

} finally {

worker.shutdownGracefully();

boos.shutdownGracefully();

}

}

public static void main(String[] args) {

DiscardServer server = new DiscardServer(8080);

try {

server.run();

} catch (InterruptedException e) {

System.out.println("發生了異常信息,異常信息如下所示:");

e.printStackTrace();

}

}

}

使用Python進行測試

python內置了socket庫可以實現連接,我們這里使用Pyhton3.x來進行操作socket.當然這里只是演示SOCKET,你也可以使用其他方法嘗試連接socket比如 js,java,或者talnet命令。

#!/usr/bin/env python

# encoding: utf-8

#coding=utf-8

__author__ = '藥師Aric'

'''

client端

長連接,短連接,心跳

'''

import socket

import time

host = '127.0.0.1'

port = 8080

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) #在客戶端開啟心跳維護

client.connect((host, port))

send_count = 0

try:

while True:

timeStr= time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

client.send((u"你好,這是Python客戶端,已經您發送消息 %s" % timeStr).encode())

send_count = send_count + 1

print("發送數據完成,已發送次數:%d" % send_count)

time.sleep(2)

except:

print("當前系統已經和服務器斷開連接....")

運行Pyhton 代碼,嘗試連接SOCKET,執行一會之后停止pyhton ,結果如下:

python發送的數據

/Users/tao/Code/Python/redisDemo/venv/bin/python /Users/tao/Code/Python/redisDemo/main/index.py

發送數據完成,已發送次數:1

發送數據完成,已發送次數:2

發送數據完成,已發送次數:3

發送數據完成,已發送次數:4

發送數據完成,已發送次數:5

當前系統已經和服務器斷開連接....

Netty收到的數據

image

總結

以上是生活随笔為你收集整理的discard python_Netty入门教程(一) 实现DISCARD服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。