|
Идентификация клиента в Remoting (не авторизация)
|
|||
---|---|---|---|
#18+
Раньше делал все приложения используя канал TcpChannel на клиенте и на сервере, сейчас думаю, какой это изврат, ведь TCP соединение может передавать данные в обе стороны асинхронно. Пишу свой канал DualTcpServerChannel и DualTcpClientChannel, каждый и IChannelReceiver и IChannelSender, задумка такая: на сервере создается TcpListener, принимает подключения клиентов, на клиенте как только канал создается, клиент тут же подключается к серверу. Затем клиент вызывает методы на сервере и может принимать вызовы от сервера без создания слушающего сокета. Это позволит работать клиентам за прокси и фаерволлами. На данный момент затык вот в чем: сервер хочет вызвать метод на клиенте, сообщение по цепочке доходит до моего транспортного синка, метод void ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream). Как мне определить к какому из клиентов отсылать сообщение? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2007, 15:53 |
|
Идентификация клиента в Remoting (не авторизация)
|
|||
---|---|---|---|
#18+
Читал я в книжке такое решение, что сервер, получив коннект от клиента, запускает работу с этим клиентом в отдельном потоке (создавая экземпляр класса) , и продолжает ждать коннект от других клиентов. Таким образом, каждый клиент обрабатывается без задержек, которые могут быть не по его вине - не подойдет Вам такое? Море излечило меня от Джихада...(с) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2007, 16:12 |
|
Идентификация клиента в Remoting (не авторизация)
|
|||
---|---|---|---|
#18+
Не, это само собой понятно. В .net framework есть два класса TcpServerChannel и TcpClientChannel, они реализуют однонаправленный канал от клиента к серверу для того чтобы клиент мог вызывать чтонибудь на сервере. Если надо получать оповещения от сервера (через event'ы или обычным вызовом функций), то необходимо создать еще канал (TcpClientChannel и TcpServerChannel) наоборот, т.е. клиент становится сервером, а сервер клиентов. Смысл моей затеи в том, чтобы на клиенте не создавать прослушивающего сокета в принципе, а использовать один Tcp-сокет для передачи сообщений в обе стороны. Затык у меня в том, что есть удаленный объект, реально находящийся на клиенте, какой то метод этот объекта вызывается с сервера, этот вызов оборачивается в сообщение (IMessage) и передается по цепочке клиентских синков на сервере. Так вот как определить какому из клиентов принадлежит этот объект? Какому клиенту сообщение отсылать? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2007, 16:24 |
|
Идентификация клиента в Remoting (не авторизация)
|
|||
---|---|---|---|
#18+
kariothНе, это само собой понятно. В .net framework есть два класса TcpServerChannel и TcpClientChannel, они реализуют однонаправленный канал от клиента к серверу для того чтобы клиент мог вызывать чтонибудь на сервере. Если надо получать оповещения от сервера (через event'ы или обычным вызовом функций), то необходимо создать еще канал (TcpClientChannel и TcpServerChannel) наоборот, т.е. клиент становится сервером, а сервер клиентов. Смысл моей затеи в том, чтобы на клиенте не создавать прослушивающего сокета в принципе, а использовать один Tcp-сокет для передачи сообщений в обе стороны. Затык у меня в том, что есть удаленный объект, реально находящийся на клиенте, какой то метод этот объекта вызывается с сервера, этот вызов оборачивается в сообщение (IMessage) и передается по цепочке клиентских синков на сервере. Так вот как определить какому из клиентов принадлежит этот объект? Какому клиенту сообщение отсылать? если вы работаете с utp - такое прокатит, а с tcp - нет, если выбрали tcp - играйте по более строгим правилам... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2007, 16:43 |
|
Идентификация клиента в Remoting (не авторизация)
|
|||
---|---|---|---|
#18+
Volhvесли вы работаете с utp - такое прокатит, а с tcp - нет, если выбрали tcp - играйте по более строгим правилам... Уже прокатило, загвоздка у меня в одном, я 100% уверен что это решается как-то ну очень просто, начинайте читать сначала ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2007, 07:49 |
|
|
start [/forum/topic.php?fid=19&fpage=35&tid=1398022]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
22ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 108ms |
0 / 0 |