Добрый вечер!
давно не был на форуме, давно ничего не писал... вот, сбылась моя мечта, найти способ построения сокет-сервера, в интернетах толковых уроков не навшел.
цель данного урока- показать, как можно общаться через сокеты с вашим сервером. думаю, нет смысла объяснять зачем нужны сокеты, и чем они "вкуснее".
что нам понадобится:
1. Python IDE
2. библиотека Twisted для Python
3. библиотека JSON для AS3
4.(опционально) сервер VPS(заказать можно от 300р, не слишком дорого, согласитесь?)
рассмотрим простой пример чата, где нету ников и т.п., остальное, думаю, сами допилите)
думаю, просто код с комментариями будет понятен, если что-то не ясно, можно будет посмотреть в гугле(слава богу, информации там уйма).
Код: Выделить всё
# -*- coding: utf-8 -*-from twisted.protocols import basicimport jsonclass MyChat(basic.LineReceiver):#создаем класс, тут будут обрабатываться все сообщения clients = [] #массив, куда будут запоминаться все пользователи def connectionMade(self):#ф-ия будет вызываться, если к нам подключились print "Got new client!" self.factory.clients.append(self)#добавляем юзверя в массив def connectionLost(self, reason):#если от нас отключились print "Lost a client!" self.factory.clients.remove(self) def dataReceived(self, line):#если получили что-то от кого-то print "received", repr(line) if line.startswith('<policy-file-request/>\x00'):#получили запрос POLICY файла print "POLICY REQUEST" msg = "<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"1025\" /></cross-domain-policy>\x00" self.transport.write(msg)#отправляем пользователю, что все ок, и можешь к нам коннектиться и общаться return#чтобы избежать дальнейшей проверки try: j = json.loads(line)#декодируем принятое сообщение if j['type'] == "groupchat":#{"type":"groupchat","message":%сообщение%} snd_to_all(j)#отправляем всем сообщение(ф-я ниже) except Exception as what: self.message('{"error":"%s"}'%what.__str__())#если получили ошибку, отправляем пользователю что за ошибка def snd_to_all(self,str):#а вот и ф-я отправки всем клиентам. прогоняемся по всему массиву клиентов, и отправляем им сообщение for i in self.clients: i.message(str) def message(self, message): if type(message) != type("test"):#на тот случай, если мы передаем не стринговое значение(можно было, конечно, написать != str, или "str", но не было время разбираться в каком формате ф-я type возвращает данные) message = json.dumps(message)#переводим объект в строку self.transport.write(message + '\n')#отправляем сообщение)from twisted.internet import protocolfrom twisted.application import service, internetfactory = protocol.ServerFactory()factory.protocol = MyChatfactory.clients = []application = service.Application("App")internet.TCPServer(1025, factory, interface='ВАШ ИП').setServiceParent(application)
вот и все. не так сложно, правда?
клиентскую часть оставлю как домашнее задание))
мы написали простой чат, где нету ников и т.п.
запускать так:
twistd -ny ВАШ_СКРИПТ.py //если с дебаггом(вывод весь идет в консоль)
twistd -y ВАШ_СКРИПТ.py //если запустить в фоне
З.Ы.