以前有用过nodejs ,一开始很不习惯 Nodejs的事情驱动, 由于它的IO 无阻塞,习惯阻塞状况下的编码 ,无阻塞反而很纳闷了。 javascript
在 nodejs IO虽然无阻塞的,致使文件,网络通讯并非和C#同样的执行方式,在nodejs中经过调用call back方法回调来完成一系列的调用。 习惯以后便会发现它的美妙了。好比在一个循环中,我要屡次发送请求,每次响应后,再接着发送。那么在C#中很简单,由于端口的监听会阻塞住线程,直到接收到请求。因此只要发送新请求的代码在接收以后执行,就行。 java
然而,一样的代码逻辑在nodejs下就不行了,它的通讯不阻塞线程,因此,循环会在很短的时间内就跑完了,事实上,是在一时间内,将全部的请求全发送出去。并不能达到收到响应再发送下个请求的目的。 可是,能够将下次请求放在callback中。这样就保证了接收后再发送。这样的事件驱动从思惟上讲仿佛比C#更容易理解。 node
今天在程序中遇到一个颇有意思的地方。 web
static void Main(string[] args) { webSocket = new Client(); // set event hander webSocket.ResponseEvent = ResponseHandler; webSocket.OpenEvent = OpenHandler; webSocket.CloseEvent = CloseHandler; webSocket.ErrorEvent = ErrorHandler; webSocket.MessageRecvEvent = MessageRecvHandler; manualEvent.Reset(); manualEvent.WaitOne(); Console.ReadKey(); }如上,若是没有 manualEvent, 那么主线程将会很快就执行完,而socket却将来得及执行。这样程序根本跑不起来。可是,我在主线程 经过manualEvent将主线程阻塞住,等待。 而在 soecket的 Reponse事件(异步的,在别的线程中执行)中 调用manualEvent的set方法,发送信号,让主线程接着执行下去。
这一系列过程,很像 nodejs下的一个普通的socket了。不过,它的主线程(执行javascript的线程)在异步操做结束前, 彷佛并不会关闭, 否则这么保证异步完成呢? 这个有待考究。 c#
Any suggestions are welcome. 网络