Nginx支持Socket转发过程详解

一网友在群中问,Nginx支持socket转发吗?

实话说,我没做过socket转发,但是我知道socket跟http一样都是通过tcp或者udp通信的,我猜测啦一下nginx应该支持吧,然后又在网上查啦一下,网上说支持,也有支持的相关官方文档,且有理有据,于是我秉承不瞎扯,知之为知之的科学态度,我只对网友回啦两个字:“可以”,就不过多扯,此时群中也有网友为他解答问题啦,我就继续干我的活啦,干活,干活,干活,干活,没有过多的关注这个问题,没有过多的关注这个问题。

一小时后,半天后,半个月后,一年后 ,十年后  ... 

此去经年,我又来到群中:哇靠,这货竟还在执着于同样的问题,不停的问:“怎么弄,怎么弄?” !! 感觉杨过的黯然销魂掌都练成啦,这个货为什么还没有半点进展。难道他在参悟天书5卷,准备修仙成佛!

于是我就对此问题产生啦极大的兴趣,开始搞。从搞到搞到结束不过30分钟,不过30分钟,搞定,搞定。下面的篇幅我会详解整个过程。

说此段子大家勿喷我,但是我只想对群中的此类网友说:

1、你们在问怎么做之前,官方文档有见到过吗,百度过相关文章吗?

2、百度文档后,有亲自操刀过吗?想游泳不下水行吗?

3、自己操刀过程中,一旦出错,你们有没有认真对待过错误信息?

4、在解锁一门招式的时候,有没有思考过类似的招式是怎么样的?或者你来设计这个招式会是什么样子的?思考?思考?关联?关联?

话有点过分,希望能引起你的关注,如果与你不对症,绕过即可,勿喷。

前10分钟,先写一个socket的服务端与客户端可以通信

实现服务端可以向客户端发送信息,客户端接受到信息后,显示出来。用c#控制台程序实现。

服务端监听本机ip与端口,服务端代码如下:

class Program { static Socket sck = null; static void Main(string[] args) { sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //监听本机ip IPAddress ip = IPAddress.Parse("172.18.8.196"); IPEndPoint endPoint = new IPEndPoint(ip, int.Parse("11911")); sck.Bind(endPoint); sck.Listen(10); Console.WriteLine("开启监听!"); Thread thread = new Thread(JtSocket); thread.IsBackground = true; thread.Start(); while (true) { var msg = Console.ReadLine().Trim(); if (msg != "") { byte[] buffer = System.Text.Encoding.ASCII.GetBytes(msg); //将要发送的数据,生成字节数组。 accSck.Send(buffer); Console.WriteLine("向客户端发送了:" + msg); } } } static Socket accSck = null; static void JtSocket() { while (true) { accSck = sck.Accept(); Console.WriteLine("链接成功!"); } } }

客户端连接ip为nginx代理服务器ip,客户端如下:

class Program { static Socket clientSocket = null; static Thread thread = null; static void Main(string[] args) { clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //这里联通nginx代理服务器地址ip IPAddress ip = IPAddress.Parse("172.18.8.252"); IPEndPoint endpoint = new IPEndPoint(ip, Convert.ToInt32("11911")); clientSocket.Connect(endpoint); thread = new Thread(ReceMsg); thread.IsBackground = true; thread.Start(); Console.WriteLine("123"); Console.ReadKey(); } static void ReceMsg() { while (true) { byte[] buffer = new byte[1024 * 1024 * 2]; clientSocket.Receive(buffer); string ReceiveMsg = System.Text.Encoding.UTF8.GetString(buffer).Substring(0,30); Console.WriteLine("接收到数据:" + ReceiveMsg); } } }

中间10分钟,搭建nginx服务器

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/17643877909f72d0345458ca09020437.html