Страница 1 из 2

два сервера на photon

СообщениеДобавлено: 13 фев 2013, 13:19
kelod
хочу сделать два сервера и передавать данные от одного к другому, пишу всё на C# один сервер написал, а как к нему присоединить второй не понятно(((

Re: два сервера на photon

СообщениеДобавлено: 13 фев 2013, 16:52
cibersant
Они у тебя будут запущены на одной машине или на 2 ?
Или как всегда изобретаем велосипед.
Если на одной машине,то обращаемся по localhost:номер порта ,если на разных то ip:номер порта.

Re: два сервера на photon

СообщениеДобавлено: 13 фев 2013, 17:39
kelod
какая разница на одной или двух?? как обратиться это самое простое, мне больше интересно как подключение организовать, как сделать один сервер клиентом, другой сервером, и что бы всё было через сокеты и на шарпе

Re: два сервера на photon

СообщениеДобавлено: 13 фев 2013, 18:25
cibersant
kelod писал(а):какая разница на одной или двух?? как обратиться это самое простое, мне больше интересно как подключение организовать, как сделать один сервер клиентом, другой сервером, и что бы всё было через сокеты и на шарпе

Ну так открыл сокеты и слушай.А вообще качаешь книгу .net сетевое программирование для профессионалов и изучаешь.И будешь профи.
Я просто с фотоном не работал.

Re: два сервера на photon

СообщениеДобавлено: 13 фев 2013, 19:16
kelod
по фотону мало чего написано по-русски((

Re: два сервера на photon

СообщениеДобавлено: 13 фев 2013, 19:36
kelod
вот собственно сервер для unity
Синтаксис:
Используется csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ExitGames.Logging;
using ExitGames.Logging.Log4Net;
using log4net.Config;
using Photon.SocketServer;
using System.IO;

namespace PhotonGame
{
        public class PhotonServer : ApplicationBase
        {

                protected override PeerBase CreatePeer(InitRequest initRequest)
                {
                        //throw new NotImplementedException();
                        return new UnityClient(initRequest.Protocol, initRequest.PhotonPeer);
                }
                protected override void Setup()
                {

                        var file = new FileInfo(Path.Combine(BinaryPath, "log4net.config"));
                        if (file.Exists)
                        {
                                LogManager.SetLoggerFactory(Log4NetLoggerFactory.Instance);
                                XmlConfigurator.ConfigureAndWatch(file);
                        }
                }
                protected override void TearDown()
                {
                }
        }
}


Синтаксис:
Используется csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Photon.SocketServer;
using ExitGames.Logging;
using PhotonHostRuntimeInterfaces;
//using MySql.Data.MySqlClient;
using System.Collections;


namespace PhotonGame
{
        public class UnityClient : PeerBase
        {
                private readonly ILogger Log = LogManager.GetCurrentClassLogger();
                public UnityClient(IRpcProtocol protocol, IPhotonPeer peer)
                        : base(protocol, peer)
                {
                        Log.Debug("Connection:" + peer.GetRemoteIP());
                }
                protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail)
                {
                        Log.Debug("Disconnected");
                }

                protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters)
                {
                        Log.Debug("Unknown operation");
                }
        }
}


и клиент в unity
Синтаксис:
Используется csharp
using ExitGames.Client.Photon;
using System.Collections.Generic;
using UnityEngine;
using System.Net;
using System;
using System.ComponentModel;
using System.Collections;
using System.Linq;
using CustomTree;

public class PhotonServer : IPhotonPeerListener
{
    public string Status { get; set; }
    PhotonPeer _peer;
    Login _login;
        //static string _avtor="";

    public PhotonServer()
    {
        Status = "Disconnected";
    }

    public void DebugReturn(DebugLevel level, string message)
    {
       
    }

    public void OnEvent(EventData eventData)
    {
}

    public void OnOperationResponse(OperationResponse operationResponse)
    {
}
 public void OnStatusChanged(StatusCode statusCode)
    {
        switch (statusCode)
        {
            case StatusCode.Connect:
                Status = "Connected";
                break;
            case StatusCode.Disconnect:
            case StatusCode.DisconnectByServer:
            case StatusCode.DisconnectByServerLogic:
            case StatusCode.DisconnectByServerUserLimit:
            case StatusCode.TimeoutDisconnect:
                Status = "Disconect";
                break;
            default:
                Status = "Unknown";
                break;
        }
    }

    public void Init(PhotonPeer peer, string serverAddress, string applicationName, Login login)
    {
        _peer = peer;
        _peer.Connect(serverAddress, applicationName);
        _login = login;
    }

    public void Disconnect()
    {
        _peer.Disconnect();
    }
    public void Update()
    {
        _peer.Service();
    }

    public void SendOperation(string l,string p)        //проверяем логин и пароль на присудствие в базе
    {
                _peer.OpCustom(1, new Dictionary<byte, object> { { 1, l }, { 2, p } }, true);
    }
       
}
 

а как организовать клиент в сервере не могу сообразить

Re: два сервера на photon

СообщениеДобавлено: 13 фев 2013, 20:40
cibersant
Для начала давайте определим что такое сервер и клиент. Итак, сервер - это специальная программа, обычно запущенная на отдельном компьютере (хосте, от слова host(eng.) - хозяин), и выполняющая некий круг задач. Клиент, в свою очередь - программа, которая запрашивает сервер выполнить то или иное действие (задачу) и вернуть полученные данные клиенту. На хосте для работы сервера обычно выделяется порт (port). К этому порту и должен будет обращаться клиент. Клиент для связи с портом хоста, который соединен в свою очередь с нужным сервером (программой), создает сокет.

В целом алгоритм работы системы клиент-сервер выглядит следующим образом:
Сервер подключается к порту на хосте и ждет соединения с клиентом;
Клиент создает сокет и пытается соединить его с портом на хосте;
Если создание сокета прошло успешно, то сервер переходит в режим ожидания команд от клиента;
Клиент формирует команду и передает ее серверу, переходит в режим ожидания ответа;
Сервер принимает команду, выполнеят ее и пересылает ответ клиенту.
и т.д.

Re: два сервера на photon

СообщениеДобавлено: 13 фев 2013, 20:41
cibersant
клиент это клиент,а сервер это сервер.

Re: два сервера на photon

СообщениеДобавлено: 13 фев 2013, 21:24
kelod
cibersant писал(а):клиент это клиент,а сервер это сервер.

вы совсем меня за придурка держите?)))
вообщем объясняю
делаю многопользовательскую игру:
клиент заходит на сайт, там видит окно unity , в котором авторизируеться и попадает в меню битв, далее он может просматривать битвы, узнавать где сколько игроков и т.д. так же может выбрать отределённую комнату и начать играть за определённую команду.
работой всего этого меню управляет сервер в сети (это я написал всё)
теперь собственно проблемма
после того как клиент выбирает комнату, он жмёт вход и если все проверки завершаются true, то клиент попадает в битву (определённую карту, с выбранными в меню параметрами), вооот
собственно этой картой я хочу управлять отдельным сервером, но нужно как то обмениваться данными этому серверу-игре с сервером-меню который управляет меню
почему я так хочу сделать? во-первых в итоге я получу 1 меню и много игр, возможно распределит нагрузку, плюс получаю универсальный способ создавать игры, не зависящие от меню, могу их располагать на разных машинах, например бесплатные игры будут находиться на тугодумающих машинах, платные на нормальных серверах(это как пример), кроме того есть ещё несколько причин, но я думаю здесь их описывать не стоит)
PS: база данных у всего этого добра пока предполагается одна и в ней будет храниться только информация о игроках и картах как таковых, вся же информация о битвах храниться на сервере меню в списках и массивах

Re: два сервера на photon

СообщениеДобавлено: 15 фев 2013, 23:13
kelod
и не кто даже совета не даст в какую сторону копать(((

Re: два сервера на photon

СообщениеДобавлено: 16 фев 2013, 17:31
Woolf
Ваш "сервер-меню" называется логин-сервером )) Честно говоря - практическую необходимость его отделения от основного я не вижу. Кто вам мешает сделать все на одном сервере?

Re: два сервера на photon

СообщениеДобавлено: 16 фев 2013, 17:39
kelod
Woolf писал(а):Ваш "сервер-меню" называется логин-сервером )) Честно говоря - практическую необходимость его отделения от основного я не вижу. Кто вам мешает сделать все на одном сервере?

если я на разных сделаю, то при большой накрузке я смогу меню на одном сервере держать, а игры на других и мне не нужно будет заморачиватся со всякими облаками, распределённой нагрузкой и прочей фигнёй, опять же цена лицензии самого фотона, в бесплатной лицензии я могу только 100 юзеров подключить, а так при 3 серверах уже почти 200 могут играть и почти сотня в меню находиться

Re: два сервера на photon

СообщениеДобавлено: 19 фев 2013, 12:09
maksimov
kelod писал(а):если я на разных сделаю, то при большой накрузке я смогу меню на одном сервере держать, а игры на других и мне не нужно будет заморачиватся со всякими облаками, распределённой нагрузкой и прочей фигнёй,


Люди та, грешным делом, полагали, что "всякие облака" и встроенные системы распределения нагрузки - это как раз то, что избавляет от необходимости "заморачиваться". А оказывается вон оно как... =)


kelod писал(а):опять же цена лицензии самого фотона, в бесплатной лицензии я могу только 100 юзеров подключить, а так при 3 серверах уже почти 200 могут играть и почти сотня в меню находиться


По выделенному серверу на каждые 100 игроков? Однако...
С учетом того, что трехсерверная лицензия стоит 249$(единоразово!), я даже боюсь представить, почем вы покупаете виндовые дедикейшны. Признайтесь честно: вы работаете сторожем в каком-то крупном немецком датацентре? :))

Re: два сервера на photon

СообщениеДобавлено: 19 фев 2013, 17:46
Woolf
в бесплатной лицензии я могу только 100 юзеров подключить, а так при 3 серверах уже почти 200 могут играть и почти сотня в меню находиться


Учитывая стоимость инди фотона в $100 без ограничений и стоимость винлицензии в $70 - как-то накладно получается ))

Re: два сервера на photon

СообщениеДобавлено: 19 фев 2013, 18:50
maksimov
Woolf писал(а):Учитывая стоимость инди фотона в $100 без ограничений и стоимость винлицензии в $70 - как-то накладно получается ))


Windows License Server обойдется примерно в 20$/месяц. Плюс к этому, стоимость самого сервака - от 50$/месяц.
В этом свете, одноразовый платеж в 100$, выглядит не более чем "заявка о намерениях". =)