Preface
This article will use a NuGet exposed component technology to achieve data subscription push function, pushed data by the server, the client subscribes to the specified data, that can receive the server pushed over the data, including the automatic re-connect function, easy to use
NuGet Address: https://www.nuget.org/packages/HslCommunication/
GitHub Address: Https://github.com/dathlin/HslCommunication If you like star or fork, you can also enjoy support.
You can download the installation in the NuGet Manager in Visual Studio, or you can enter the following instructions directly in the NuGet console to install:
Install-package hslcommunication
NuGet Installation Tutorial Http://www.cnblogs.com/dathlin/p/7705014.html
Technical Support QQ Group: 592132877 (Component version update details will be released in the group first) Component API address: http://www.cnblogs.com/dathlin/p/7703805.html
Access to the test project, both the client and the server source code are in the address above
The following project is an Access test project for this component, you can test the initial access, eliminating the hassle of writing your test program, and the source code is in the project at the beginning of this article.
is:hslcommunicationdemo.zip
The following is a subscription to the data for the specified keyword for the server, which provides several keyword subscriptions for testing.
- B Random Number Subscription
- C Time Subscription
- D JSON data Subscription
- E-XML Data subscription
If the server is not available, download the local version of the server
Pushnetserver.zip
Feature Support
- Support for data broadcast, broadcast by specified keywords
- Support for client wire break and re-connect
- Supports simple server-side monitoring
- Support Log output
- Server supports data input from other remote servers to form a data push network
- Currently only supports string data pushes, complex data needs to be serialized, with reference to JSON push and XML push
Reference
Modbus components all the function classes are in the hslcommunication.enthernet namespace, so before you use Add
Using hslcommunication.enthernet;using hslcommunication;
Server-side Setup
Declaring a variable first
Private Netpushserver Pushserver;
And then write the following code in a Startup button.
Pushserver = new Netpushserver ();p Ushserver.serverstart (12345);
Up to this point, the server code has been basically written, just two or three lines of code. Only the current data does not have the data push function.
What a classic scenario is, for example, you have a bunch of real-time data collected from the device, and the data is on the server. You also have a client software, many people are online at the same time, if others turn on the monitoring of real-time data, it is particularly suitable for this component of the method, because you go to the database is obviously slower, and the pressure on the server is also large. This component is the perfect solution to this issue,
Suppose you collect data from the device, we make a 1 second timer, then start the timer, simulate the data push per second, push what? Try random numbers first.
Private random random = new random (); First define a random number generator
The code for the timer is as follows:
Pushserver.pushstring ("A", random. Next (1000, 10000). ToString ());
So far, a complete code for the server has been written. Let's see how the client writes.
Client Side Build
Declaring a variable first
Private Netpushclient pushclient;
Instantiate, you need to specify the IP and port of the server, and the keywords you want to subscribe to
Pushclient = new Netpushclient ("127.0.0.1", 12345, "A");
Next is to create a subscription, you need to specify a call to the delegate, will return a successful signal, because there might be a reason for the network, it is possible because there is no such keyword, will cause the creation to fail.
Operateresult Create = Pushclient.createpush (new action<netpushclient, string> (Pushfromserver)); if (create. issuccess) { MessageBox.Show ("Success"); } else { MessageBox.Show ("failed:" + Create. Message); }
The above uses a delegate, the Pushfromserver method is as follows, mainly uses the delegate to display the data:
private void Pushfromserver (Netpushclient pushclient, string data) { if (ishandlecreated) Invoke (New action< ;string> (M = { Label8. Text = DateTime.Now.ToString ("Yyyy-mm-dd HH:mm:ss.fff"); Show the receiving time receivecount++; Label9. Text = Receivecount.tostring (); Shows the number of received Textbox4.text = m; Data is finally shown here }); }
Shut down the client before the corresponding window is closed. If you do not close the window manually, it is likely that the connection will still be there.
Pushclient.closepush ();
A simple complete data subscription has been completed.
Complex Data subscriptions
The above code can only push string data, how to implement the push of complex data, we assume that there are 4 of data, we need to push to the client at the same time. Then we can choose 2 ways, one is JSON, one is XML, each has pros and cons
Json
Jobject json = new Jobject (); Json. ADD ("Value1", New Jvalue (random. Next (9999)); Json. ADD ("value2", New Jvalue (Math.Round (random. Nextdouble (), 6) *); Json. ADD ("Value3", New Jvalue (Guid.NewGuid (). ToString ())); Json. ADD ("Value4", New Jvalue (DateTime.Now)); Pushserver.pushstring (Textbox14.text, JSON. ToString ());
Xml
XElement element = new XElement ("Data"); Element. Setelementvalue ("value1", random. Next (9999)); Element. Setelementvalue ("value2", (Math.Round (random. Nextdouble (), 6) * 1000). ToString ()); Element. Setelementvalue ("Value3", Guid.NewGuid (). ToString ()); Element. Setelementvalue ("Value4", DateTime.Now.ToString ("O")); Pushserver.pushstring (Textbox18.text, element. ToString ());
Parse the time according to the corresponding information can be resolved.
Token settings
The server supports token settings, and if the client fails to provide a consistent token checksum, the connection is denied and the security of the system is improved
Pushserver.token = new Guid ("04f6e588-4b9c-4dfb-86b2-4389742534b5");
The client needs to set the same token to log on to the server for data validation.
Log output
Pushserver.lognet = new HslCommunication.LogNet.LogNetSingle ("Log.txt"); Support Log
Monitor the number of online clients
There is a property that identifies the number of all clients on the server side of the line, a convenient system for monitoring
Pushserver.onlinecount
Star-shaped data network
The above shows are manually push server data, or write code acquisition device to achieve automatic push, if you want to do distributed data push, or to alleviate the server's data push, then you can do as follows
That is, a master server pushes data to 2 sub-servers, and then pushes the data to the client by the child server.
For the main service and push client code does not need any change, mainly with a layer of intermediate server, is also the Netpushserver class, the child server data needs to come from manual, only need to manually add a line of code to
Operateresult Create = Pushserver.createpushremote ("127.0.0.1", 12345, "A"); if (create. issuccess) { MessageBox.Show ("created successfully! " ); } else { MessageBox.Show ("Create failed! "+ Create. Message); }
This means that the child server subscribes to the data of the keyword A of another primary server and pushes it to other online clients in real time.
Once you are familiar with this principle, you can build a high-performance data push Network service.
Dynamic keywords
The above operation is static keyword push, push the data are everyone has, how to push a dedicated client? can also be implemented, a little more complex, first through another network to contract a common unique keyword, such as the GUID code, and then has this code as the keyword push.
Another interactive network can be consulted: http://www.cnblogs.com/dathlin/p/7697782.html
What are the examples of this situation,,, such as you make a request to the server, this request may be long, you do not know when the server can be completed, a percentage of the server to show the progress of the time, the need for dynamic keywords, the process of server operation only need to push progress to the unique keyword.
If there is any problem, you can add group chat.
C # Data push live data push lightweight message subscription publish multilevel message push distributed push