Доброе время суток, коллеги.
Подскажите как создать подключение по Websocket со стороны сервера
Нравится
Добрый день.
Не понял? Соединение по веб-сокетах клиент-серверное. Клиент отправил запрос, получил от сервера ответ и т.д.
С кем Вы будете соединятся со стороны сервера?
Вообще, с клиента, если подключить jQuery в Dependency можно соединиться с сервером:
[javascript]
function connect(host) {
debug("Connecting to " + host + " ...");
try {
ws = new WebSocket(host); // create the web socket
} catch (err) {
debug(err, 'error');
}
ws.onopen = function () {
debug("connected... ", 'success'); // we are in! :D
};
ws.onmessage = function (evt) {
debug(evt.data, 'response'); // we got some data - show it omg!!
};
ws.onclose = function () {
debug("Socket closed!", 'error'); // the socket was closed (this could be an error or simply that there is no server)
};
};
[/javascript]
Дмитрий, интересует как подключиться по websocket не с клиента, а с сервера BPM. Например при помощи конфигурационного сервиса.
Антон, куда подключиться?
WebSocket — протокол, предназначенный для обмена сообщениями между браузером и веб-сервером
Дмитрий, нужно обмениваться с сообщениями по Websocket не между браузером и вэб-сервером, а из вэб-сервиса на сервере BPM c неким вэб-сервисом
Вот класс, который будет слушать определенный порт (к примеру веб-сервис на сервере BPM)
[csharp]
class AuthServer
{
private TcpListener tcpListener;
private Thread listenThread;
private TcpClient[] clientList = new TcpClient[100];
private int n = 0;
private string clientMessage;
public string ClientMessage
{
get { return clientMessage; }
}
public AuthServer()
{
this.tcpListener = new TcpListener(IPAddress.Any, 8181);
this.listenThread = new Thread(new ThreadStart(ListenForUsers));
this.listenThread.Start();
}
public void ListenForUsers()
{
this.tcpListener.Start();
while (true)
{
//blocks until a client has connected to the server
TcpClient client = this.tcpListener.AcceptTcpClient();
Console.WriteLine("{0} - Some1 connected!", DateTime.Now.Date.ToString());
clientList[n] = client;
n++;
//create a thread to handle communication
//with connected client
Thread clientThread = new Thread(new ParameterizedThreadStart(ReadDataFromClient));
clientThread.Start(client);
}
}
private void ReadDataFromClient(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = new byte[4096];
int bytesRead;
while (true)
{
bytesRead = 0;
try
{
//blocks until a client sends a message
bytesRead = clientStream.Read(message, 0, 4096);
}
catch
{
//a socket error has occured
break;
}
if (bytesRead == 0)
{
//the client has disconnected from the server
Console.WriteLine("{0} - Some1 disconnected!", DateTime.Now.Date.ToString());
break;
}
//message has successfully been received
ASCIIEncoding encoder = new ASCIIEncoding();
this.clientMessage = encoder.GetString(message, 0, bytesRead);
ProcessClientMessage(this.ClientMessage, tcpClient);
}
tcpClient.Close();
}
}
[/csharp]
А вот клиент - некий веб-сервис:
[csharp]
class Program
{
static void Main(string[] args)
{
using (TcpClient client = new TcpClient())
{
IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Loopback, 8181);
//client.Client.
client.Connect(serverEndPoint);
using (NetworkStream clientStream = client.GetStream())
{
Console.WriteLine("Connected? :" + client.Connected.ToString());
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] buffer = encoder.GetBytes("login;password");
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
clientStream.ReadTimeout = 29000;
byte[] message = new byte[4096];
int bytesRead = 0;
bytesRead = clientStream.Read(message, 0, 4096);
string msg = encoder.GetString(message, 0, bytesRead);
Console.WriteLine("Message: " + msg);
Console.ReadKey();
return;
}
}
}
}
[/csharp]
Надеюсь это Вам чем то поможет.
Правда не понимаю причем тут BPM :)
Если вопрос еще актуален: в BPMonline 5.4 есть такая возможность, используется библиотека фреймворка http://websocket4net.codeplex.com/
Пример:
[csharp]
var webSocketClient = new WebSocket(address, "basic");
webSocketClient.OnOpen += (sender, e) => {
/* some code */
};
webSocketClient.Connect();
result = openEvent.WaitOne(1000);
[/csharp]