2 серва как 1

Теги:
 

Zil
Zil2

втянувшийся
Незнал где запостить, решил написать тут:)
вопщем вопрос состоит в - Можно ли сделать так, чтобы 2 серва имели одну общую базу, т.е. игроки подконнектившись к 2-м разным серверам могли например встречаться в игре, торговаться и т.д. Если есть такая возможность, то обьясните пожалуйста по пальцам как это сделать. А то в моем городе у нашего провайдера каннект ацтойный и связь между районами города оставляет желать лучшего.
Lineage II C4 server (off C1 modded) www.perious.ru (еще не стартовал)  
+
-
edit
 

Balancer

администратор
★★★★★
Сейчас такое сделать нельзя.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

mIRC

новичок
А когда моня будет? :)
You wanted BEST?...Here I am....  

Zil
Zil2

втянувшийся
Уж очень надо. Может кто-нить знает подобные тулзы?
Lineage II C4 server (off C1 modded) www.perious.ru (еще не стартовал)  

Murkt

Pythoneer

Уж очень надо. Может кто-нить знает подобные тулзы?
 

Сия тулза называется - отличное знание Java, структуры сервера, прямые руки и много времени.
[team Їжачки - сумні падлюки]  
+
-
edit
 

Silence

новичок
И кроме того ,хороший конект обеих серверов к базе данных

Но если судить для чего тебе ето надо ,то есть у тебя провайдер плохой конект выдает,а сервера в разных концах города,то все ровно не получется
 
+
-
edit
 

pcworld

новичок
Опиши проблемму..., если необходимо разделение сервера так сказать на 2 и более локальных сетей то я для сервака у себя в городе сдалал такой модик, т.е. ты подсети вписываеш сам...

Вот так вот:
Файл LoginServer.java
code java
  1. /*
  2.  * This program is free software; you can redistribute it and/or modify
  3.  * it under the terms of the GNU General Public License as published by
  4.  * the Free Software Foundation; either version 2, or (at your option)
  5.  * any later version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful,
  8.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.  * GNU General Public License for more details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License
  13.  * along with this program; if not, write to the Free Software
  14.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  15.  * 02111-1307, USA.
  16.  *
  17.  * http://www.gnu.org/copyleft/gpl.html
  18.  */
  19. package net.sf.l2j.loginserver;
  20.  
  21. import java.io.IOException;
  22. import java.io.InputStream;
  23. import java.io.InputStreamReader;
  24. import java.io.LineNumberReader;
  25. import java.net.InetAddress;
  26. import java.net.ServerSocket;
  27. import java.net.Socket;
  28. import java.util.Properties;
  29. import java.util.logging.Level;
  30. import java.util.logging.Logger;
  31.  
  32.  
  33. import net.sf.l2j.Config;
  34.  
  35. /**
  36.  * This class ...
  37.  *
  38.  * @version $Revision: 1.9.4.4 $ $Date: 2005/03/27 15:30:09 $
  39.  */
  40. public class LoginServer extends Thread
  41. {
  42.     private static LoginServer _instance;
  43.    
  44.     private LoginController loginController;
  45.  
  46.     private ServerSocket    clientServerSocket;
  47.  
  48.     private Logins          loginManager;
  49.  
  50.     private InetAddress     clientListeningIP;
  51.  
  52.     private int             clientListeningPort;
  53.  
  54.     private int             clientGameServerPort;
  55.  
  56.     private String          _externalHostname;
  57.  
  58.     private String          _internalHostname;
  59.  
  60.     private boolean         _forwardLocalClient;
  61.  
  62.     private String          _InternalAdvHostEnabled;
  63.     private String          _internalHostname1;
  64.     private String          _internalHostname2;
  65.  
  66.     private static String[] _iternalNetwork1 = new String[255];
  67.     private static String[] _iternalNetwork2 = new String[255];
  68.     private static String[] _OpenIp = new String[255];
  69.  
  70.  
  71.     static Logger           _log = Logger.getLogger(LoginServer.class.getName());
  72.  
  73.     public static void main(String[] args) throws IOException
  74.     {
  75.         LoginServer server = new LoginServer("Stand Alone LoginServer.");
  76.         _log.config("Stand Alone LoginServer Listening on port " + Config.PORT_LOGIN);
  77.         server.start();
  78.     }
  79.  
  80.     public void close()
  81.     {
  82.         this.interrupt();
  83.         try
  84.         {
  85.             clientServerSocket.close();
  86.         }
  87.         catch (IOException e)
  88.         {
  89.             _log.log(Level.INFO, "", e);
  90.         }
  91.     }
  92.  
  93.     /**
  94.      *
  95.      */
  96.     public void run()
  97.     {
  98.         while (true)
  99.         {
  100.             try
  101.             {
  102.  
  103.  
  104.                 if (Config.DEBUG)
  105.                     _log.fine("waiting for client connection...");
  106.                 Socket connection = clientServerSocket.accept();
  107.                 if (Config.DEBUG)
  108.                     _log.fine("connection from " + connection.getInetAddress());
  109.  
  110.                 // use local ip addess if no external hostname is set or if
  111.                 // the the connection is requested from localhost (for router
  112.                 // compatibility)
  113.                 String connectedIp = connection.getInetAddress().getHostAddress();
  114.  
  115.  
  116.         if ( _InternalAdvHostEnabled == null)
  117.         {
  118.  
  119.  
  120.                 if (connectedIp.startsWith("192.168.") || connectedIp.startsWith("10.") || connectedIp.startsWith("172.16.") || connectedIp.startsWith("127.0.0.1"))
  121.                 {
  122.                     if (Config.DEBUG)
  123.                         _log.fine("using internal ip as server ip " + _internalHostname);
  124.                     new ClientThread(connection, loginManager, _internalHostname, clientGameServerPort);
  125.                 }
  126.                 else
  127.                 {
  128.                     if (Config.DEBUG)
  129.                         _log.fine("using external ip as server ip " + _externalHostname);
  130.                     new ClientThread(connection, loginManager, _externalHostname, clientGameServerPort);
  131.                 }
  132.  
  133.         }
  134.         else
  135.         {
  136.  
  137.         for (int inet = 0; inet < 255; inet++)
  138.         {
  139.                if (_iternalNetwork1[inet] != null)
  140.                {
  141.                if (connectedIp.startsWith(_iternalNetwork1[inet]))
  142.                 {
  143.                     _log.config("Login Server : Connecting using ip " + _internalHostname1 + " on IP Network : " + _iternalNetwork1[inet] + " for IP: " + connectedIp);
  144.  
  145.                      if (Config.DEBUG)
  146.                         _log.fine("Login Server : Connecting using internal ip as server ip " + _internalHostname1);
  147.                         _log.fine("Login Server : user on :" + _iternalNetwork1[inet]);
  148.                 new ClientThread(connection, loginManager, _internalHostname1, clientGameServerPort);
  149.                }
  150.                }
  151.                if (_iternalNetwork2[inet] != null)
  152.                {
  153.                if (connectedIp.startsWith( _iternalNetwork2[inet]))
  154.                 {
  155.                     _log.config("Login Server : Connecting using ip " + _internalHostname2 + " on IP Network : " + _iternalNetwork2[inet] + " for IP: " + connectedIp);
  156.  
  157.                     if (Config.DEBUG)
  158.                         _log.fine("Login Server : Connected using internal ip as server ip " + _internalHostname2);
  159.                         _log.fine("Login Server : user on :" + _iternalNetwork2[inet]);
  160.                     new ClientThread(connection, loginManager, _internalHostname2, clientGameServerPort);
  161.                 }
  162.                }
  163.         }
  164.  
  165.         }
  166.  
  167.  
  168.                 if (this.isInterrupted())
  169.                 {
  170.                     // shutdown?
  171.                     try
  172.                     {
  173.                         clientServerSocket.close();
  174.                     }
  175.                     catch (IOException io)
  176.                     {
  177.                         _log.log(Level.INFO, "", io);
  178.                     }
  179.                     break;
  180.                 }
  181.             }
  182.             catch (IOException e)
  183.             {
  184.                 // not a real problem
  185.                 if (this.isInterrupted())
  186.                 {
  187.                     // shutdown?
  188.                     try
  189.                     {
  190.                         clientServerSocket.close();
  191.                     }
  192.                     catch (IOException io)
  193.                     {
  194.                         _log.log(Level.INFO, "", io);
  195.                     }
  196.                     break;
  197.                 }
  198.             }
  199.         }
  200.     }
  201.  
  202.     public LoginServer(String threadName)
  203.     {
  204.         super(threadName);
  205.  
  206.         clientListeningPort = Config.PORT_LOGIN;
  207.  
  208.         new GameServerListener().start();
  209.     }
  210.  
  211.     public LoginServer() throws IOException
  212.     {
  213.         super("LoginServer");
  214.  
  215.         Properties serverSettings = new Properties();
  216.         InputStream is = getClass().getResourceAsStream(Config.CONFIGURATION_FILE);
  217.         serverSettings.load(is);
  218.         is.close();
  219.  
  220.         String loginIp = serverSettings.getProperty("LoginserverHostname");
  221.         _externalHostname = serverSettings.getProperty("ExternalHostname");
  222.         if (_externalHostname == null)
  223.         {
  224.             _externalHostname = "localhost";
  225.         }
  226.  
  227.         _internalHostname = serverSettings.getProperty("InternalHostname");
  228.         if (_internalHostname == null)
  229.         {
  230.             _internalHostname = "localhost";
  231.         }
  232.         String createAccounts = serverSettings.getProperty("AutoCreateAccounts");
  233.  
  234.         _InternalAdvHostEnabled= serverSettings.getProperty("InternalAdvHostEnabled");
  235.         _internalHostname1 = serverSettings.getProperty("InternalHostname1");
  236.         _internalHostname2 = serverSettings.getProperty("InternalHostname2");
  237.  
  238.  
  239.         if (!"*".equals(loginIp))
  240.         {
  241.             clientListeningIP = InetAddress.getByName(loginIp);
  242.             _log.config("LoginServer listening on IP:" + clientListeningIP.getHostAddress() + " Port " + Config.PORT_LOGIN);
  243.             clientServerSocket = new ServerSocket(Config.PORT_LOGIN, 50, clientListeningIP);
  244.         }
  245.         else
  246.         {
  247.             _log.config("LoginServer listening on all available IPs on Port " + Config.PORT_LOGIN);
  248.             clientServerSocket = new ServerSocket(Config.PORT_LOGIN);
  249.         }
  250.  
  251.         _log.config("Hostname for external connections is: " + _externalHostname);
  252.         if ( _InternalAdvHostEnabled == null)
  253.         {
  254.         _log.config("Hostname for internal connections is: " + _internalHostname);
  255.         }
  256.         else
  257.         {
  258.         _log.config("Login Server : Advanted Internal Connections is Enabled ");
  259.         _log.config("Login Server : Internal Host #1: " + _internalHostname1);
  260.         _log.config("Login Server : Found IP Network #1: ");
  261.         for (int inet = 0; inet < 255; inet++)
  262.          {
  263.                 if (serverSettings.getProperty("InternalNetwork1-"+inet) != null)
  264.                 {
  265.                   _log.config( "Login Server : "+ serverSettings.getProperty("InternalNetwork1-"+inet));
  266.                   _iternalNetwork1[inet] = serverSettings.getProperty("InternalNetwork1-"+inet);
  267.                 }
  268.          }
  269.         _log.config("Login Server : Internal Host #2: " + _internalHostname2);
  270.         _log.config("Login Server : Found IP Network #2: ");
  271.         for (int inet = 0; inet < 255; inet++)
  272.          {
  273.                 if (serverSettings.getProperty("InternalNetwork2-"+inet) != null)
  274.                 {
  275.                   _log.config( "Login Server : "+ serverSettings.getProperty("InternalNetwork2-"+inet));
  276.                   _iternalNetwork2[inet] = serverSettings.getProperty("InternalNetwork2-"+inet);
  277.          }
  278.         }
  279.         }
  280.  
  281.  
  282.         loginManager = new Logins(Boolean.valueOf(createAccounts).booleanValue());
  283.  
  284.         clientGameServerPort = Config.PORT_GAME;
  285.         /*
  286.          * ArrayList<String> bannedIpList = new ArrayList<String>();
  287.          * Properties bannedIpFile = new Properties(); try {
  288.          * bannedIpFile.loadFromXML(getClass().getResourceAsStream(Config.BANNED_IP_XML)); }
  289.          * catch (InvalidPropertiesFormatException e) { e.printStackTrace(); }
  290.          * catch (IOException e) { e.printStackTrace(); }
  291.          * bannedIpFile.setProperty(loginIp, createAccounts);
  292.          * bannedIpList.toString()
  293.          */
  294.         try
  295.         {
  296.             InputStream bannedFile = getClass().getResourceAsStream("/banned_ip.cfg");
  297.             if (bannedFile != null)
  298.             {
  299.                 int count = 0;
  300.                 InputStreamReader reader = new InputStreamReader(bannedFile);
  301.                 LineNumberReader lnr = new LineNumberReader(reader);
  302.                 String line = null;
  303.                 while ((line = lnr.readLine()) != null)
  304.                 {
  305.                     line = line.trim();
  306.                     if (line.length() > 0)
  307.                     {
  308.                         count++;
  309.                         ClientThread.addBannedIP(line);
  310.                     }
  311.                 }
  312.  
  313.                 _log.info(count + " banned IPs defined");
  314.             }
  315.             else
  316.             {
  317.                 _log.info("banned_ip.cfg not found");
  318.             }
  319.  
  320.         }
  321.         catch (Exception e)
  322.         {
  323.             _log.warning("error while reading banned file:" + e);
  324.         }
  325.  
  326.     }
  327.    
  328.     /**
  329.      *
  330.      */
  331.     public static LoginServer getInstance()
  332.     {
  333.         // If no instances started before, try to start a new one
  334.         if (_instance == null)
  335.   &n
 

Zil
Zil2

втянувшийся
pcworld:
Опиши проблемму..., если необходимо разделение сервера так сказать на 2 и более локальных сетей то я для сервака у себя в городе сдалал такой модик, т.е. ты подсети вписываеш сам...
 

Сеть у меня 1 локалка, подсетей куча, нужно сделать так: 1 сервер в одной части города, другой в другой части, люди приконнектившись к первому серву могли играть с людьми, приконнектившимися ко второму серву.
Lineage II C4 server (off C1 modded) www.perious.ru (еще не стартовал)  
+
-
edit
 

valsha

разработчик l2j-сервера

Просто желательно сделать в конфиге сервера НЕСКОЛЬКО (LAN) интерфейсов на котором он бы иог работать!
Или вообще просто порописывать, типа:
lan_nic=10.1.1.1
lan_nick=192.168.0.1
wan_nick=83.55.55.0
Я например досих пор понять не могу почему у L2J жестко всего по ОДНОМУ интерфейсу(
World of Warcraft (WOWEmu) PvPGN 1.6.6 (War/Srat/ClosedD2); Quake3; CS/CZ 1.5/1.6; WolfET; NewerwinterNights1.65; UT2004 (3339); CoD UO; Soldat; GTA VC 0.5;  

Zil
Zil2

втянувшийся
А можно ли сделать ОффС3 на 2 сети?
Lineage II C4 server (off C1 modded) www.perious.ru (еще не стартовал)  

KUBik

новичок
всё намного проще!
теперь же есть сервак с отдельным логинсервером и геймсервером
У МЕНЯ ЛИЧНО СТОИТ 2 СЕРВАКА НА 1 ТАЗИКЕ И ВСЁ ЧИКИ-ПИКИ!
 

Styx

разработчик l2j-сервера
Zil> А можно ли сделать ОффС3 на 2 сети?
пацтулам :)
...and what better way to say goodbye than to kill everyone in sight? © Syntari  

Zil
Zil2

втянувшийся
Ребят, вы не поняли - я говорю об обьединении двух сетей!!! Есть какие-то проги для перенаправления пакетов с одной сетевой карты на другую! Мне интересно было бы знать какие и как ими пользоваться...тока учтите, что офф стоит на винде, а не на Линухе...На Линухе было бы проще это сделать
Lineage II C4 server (off C1 modded) www.perious.ru (еще не стартовал)  

jem

новичок
Ребята, помогите, пожалуйста. У нас в городе несколько сеток. Я настроил на своём ВНУТРЕННЕМ сервере WoW так, что можно по имени войти в игрушки требующие авторизации (так настроил WoW-сервер, где в wowemu.key прописал не ИП, а домен), путём сопосталения имени соответствующего ИП для каждой сети в файле hosts. Но вот для линейки не получается - сервер упорно отправляет клиентов на свой внутренний адрес, который из-за первого же NATа не виден вообще. как можно заставить сервер линейки отправлять клиента не на ИП (который он как сволочь резольвит), а на имя прописанное в конфиге в виде ExternalHostname и InternalHostname?
 

Drac

разработчик l2j-сервера

Ставишь вместо определенного IP-адреса просто * . У меня все сразу заработало.
 

jem

новичок
Drac, не работает. Причём даже в этой же сетке. :(
 

Drac

разработчик l2j-сервера

Я дополнительно поставил роуты для других сетей. Не знаю, технология НАТа должна позволять играца, у меня так 13 подсетей ( 9 через 1 шлюз + 4 через 2 шлюз) играют на сервере.
 

ebosh

новичок
нельзя реализовать 2 сервера с 1й базой, верней можно, НО игроки с 1го сервера не будут видеть игроков со 2го сервера и наоборот... А вообще настрой NAT, и будет тебе счастье...
 

jem

новичок
Drac, каким образом развести три подсетки? Есть сервер линейки, находящийся за NATом. То есть другие сетки он видит, а его нет. Настроен мапинг портов 2106 и 7777 на этот сервер с роутера. То есть внутрь можно попасть только обращаясь на внешний ИП роутера (в каждой сетке он свой). Прописывал один из внешних в конфиге - пофиг. Сервер отправляет клиента на его внутренний ИП, который за NATом естественно не виден. Прописать роутинг из этих подсетей вовнутрь сетки с сервером нельзя - провайдеры посылают нахер, да и не надо нам этого. А прописывание доменного имени тоже не помогает, сервер линейки резольвит его и отправляет на тот же внутренний ИП. :(
 

Drac

разработчик l2j-сервера

Гм, провайдера надо тыкать полюбому. Слава Богу я сам работаю в фирме провайдере, где сервак держу, и у меня таких проблем не было, а то послали бы тоже нахрен.
 

jem

новичок
Drac, теперь всё понятно. Ты собрал сервер видящий все сетки. А у нас проблема совершенно другая. Провайдер вообще не собирается чего-либо делать в отношении игр, поэтому сервер одной из заNATеных сеток единственный выход. Ни у кого нету идей по решению проблемы?
 

jem

новичок
Ребята, объясните чайнику, как вышепроцитированный LoginServer.java использовать, плиз. :)
 

в начало страницы | новое
 
1942: Оборона Севастополя (80 лет).
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru