NodeJS Socket.io

时间:2017-08-15 04:57:18

标签: node.js socket.io

我是nodejs的新手。我刚刚在node和socket.io中学到了非常简单的东西。直到现在我从外部文件夹练习,我,不在本地服务器或实时服务器。现在我想在本地服务器上做。我有我的文件夹结构像这样:

  xampp\htdocs\socketexmp->
        .node-modules
        .chat.js
        .chat.html

我已将chat.html文件指向虚拟服务器主机名:

   http://dev.chatexmp.com

在端口8080上运行。节点服务器在端口:8000上运行。 我的这两个文件如下。       chat.js

    var app = require('express')();
      var http = require('http').Server(app);
      var io = require('socket.io')(http);

      app.get('/', function(req, res){
      res.sendFile('chat.html',{root:__dirname});
      });
      users = [];
      io.on('connection', function(socket){
      console.log('A user connected');
      socket.on('setUsername', function(data){
      console.log(data);
      if(users.indexOf(data) > -1){
      socket.emit('userExists', data + ' username is taken! Try some other username.');
      }
      else{
      users.push(data);
      socket.emit('userSet', {username: data});
      }
      });
      socket.on('msg', function(data){
      //Send message to everyone
      io.sockets.emit('newmsg', data);
      })
      });
      http.listen(8000, function(){
      console.log('listening on localhost:8000');
      });

和chat.html

           <!DOCTYPE html>
            <html>
            <head><title>Hello world</title></head>
            <!-- <script src="/socket.io/socket.io.js"></script> -->
            <script src="http://localhost:8000/socket.io/socket.io.js"></script>
            <script>
            var socket = io();
            function setUsername(){
            socket.emit('setUsername', document.getElementById('name').value);
            };
            var user;
            socket.on('userExists', function(data){
            document.getElementById('error-container').innerHTML = data;
            });
            socket.on('userSet', function(data){
            user = data.username;
            document.body.innerHTML = '<input type="text" id="message">\
            <button type="button" name="button" onclick="sendMessage()">Send</button>\
            <div id="message-container"></div>';
            });
            function sendMessage(){
            var msg = document.getElementById('message').value;
            if(msg){
            socket.emit('msg', {message: msg, user: user});
            }
            }
            socket.on('newmsg', function(data){
            if(user){
            document.getElementById('message-container').innerHTML += '<div><b>' + data.user + '</b>: ' + data.message + '</div>'
            }
            })
            </script>
            <body>
            <div id="error-container"></div>
            <input id="name" type="text" name="name" value="" placeholder="Enter your name!">
            <button type="button" name="button" onclick="setUsername()">Let me chat!</button>
            </body>
            </html>

目前,我正在运行此示例,方法是启动节点服务器并转到浏览器并输入:

  localhost:8000

一切正常。我可以聊天我现在想要的是,我想去我的虚拟主机:

  http://dev.chatexmp.com:8080

让它发挥作用。但它不起作用。我见过thisthis等教程。可能是他们很好,但我的水平很低,无法理解。任何人都可以让我明白我该怎么做才能让它发挥作用。谢谢。

这是apache配置文件i,httpd.conf

  #
            # This is the main Apache HTTP server configuration file.  It contains the
            # configuration directives that give the server its instructions.
            # See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
            # In particular, see 
            # <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
            # for a discussion of each configuration directive.
            #
            # Do NOT simply read the instructions in here without understanding
            # what they do.  They're here only as hints or reminders.  If you are unsure
            # consult the online docs. You have been warned.  
            #
            # Configuration and logfile names: If the filenames you specify for many
            # of the server's control files begin with "/" (or "drive:/" for Win32), the
            # server will use that explicit path.  If the filenames do *not* begin
            # with "/", the value of ServerRoot is prepended -- so "logs/access_log"
            # with ServerRoot set to "/usr/local/apache2" will be interpreted by the
            # server as "/usr/local/apache2/logs/access_log", whereas "/logs/access_log" 
            # will be interpreted as '/logs/access_log'.
            #
            # NOTE: Where filenames are specified, you must use forward slashes
            # instead of backslashes (e.g., "c:/apache" instead of "c:\apache").
            # If a drive letter is omitted, the drive on which httpd.exe is located
            # will be used by default.  It is recommended that you always supply
            # an explicit drive letter in absolute paths to avoid confusion.

            #
            # ServerRoot: The top of the directory tree under which the server's
            # configuration, error, and log files are kept.
            #
            # Do not add a slash at the end of the directory path.  If you point
            # ServerRoot at a non-local disk, be sure to specify a local disk on the
            # Mutex directive, if file-based mutexes are used.  If you wish to share the
            # same ServerRoot for multiple httpd daemons, you will need to change at
            # least PidFile.
            #
            ServerRoot "E:/xampp/apache"

            #
            # Mutex: Allows you to set the mutex mechanism and mutex file directory
            # for individual mutexes, or change the global defaults
            #
            # Uncomment and change the directory if mutexes are file-based and the default
            # mutex file directory is not on a local disk or is not appropriate for some
            # other reason.
            #
            # Mutex default:logs

            #
            # Listen: Allows you to bind Apache to specific IP addresses and/or
            # ports, instead of the default. See also the <VirtualHost>
            # directive.
            #
            # Change this to Listen on specific IP addresses as shown below to 
            # prevent Apache from glomming onto all bound IP addresses.
            #
            #Listen 12.34.56.78:80
            Listen 80
            Listen 8080

            #
            # Dynamic Shared Object (DSO) Support
            #
            # To be able to use the functionality of a module which was built as a DSO you
            # have to place corresponding `LoadModule' lines at this location so the
            # directives contained in it are actually available _before_ they are used.
            # Statically compiled modules (those listed by `httpd -l') do not need
            # to be loaded here.
            #
            # Example:
            # LoadModule foo_module modules/mod_foo.so
            #
            LoadModule access_compat_module modules/mod_access_compat.so
            LoadModule actions_module modules/mod_actions.so
            LoadModule alias_module modules/mod_alias.so
            LoadModule allowmethods_module modules/mod_allowmethods.so
            LoadModule asis_module modules/mod_asis.so
            LoadModule auth_basic_module modules/mod_auth_basic.so
            #LoadModule auth_digest_module modules/mod_auth_digest.so
            #LoadModule auth_form_module modules/mod_auth_form.so
            #LoadModule authn_anon_module modules/mod_authn_anon.so
            LoadModule authn_core_module modules/mod_authn_core.so
            #LoadModule authn_dbd_module modules/mod_authn_dbd.so
            #LoadModule authn_dbm_module modules/mod_authn_dbm.so
            LoadModule authn_file_module modules/mod_authn_file.so
            #LoadModule authn_socache_module modules/mod_authn_socache.so
            #LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so
            #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
            LoadModule authz_core_module modules/mod_authz_core.so
            #LoadModule authz_dbd_module modules/mod_authz_dbd.so
            #LoadModule authz_dbm_module modules/mod_authz_dbm.so
            LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
            LoadModule authz_host_module modules/mod_authz_host.so
            #LoadModule authz_owner_module modules/mod_authz_owner.so
            LoadModule authz_user_module modules/mod_authz_user.so
            LoadModule autoindex_module modules/mod_autoindex.so
            #LoadModule buffer_module modules/mod_buffer.so
            #LoadModule cache_module modules/mod_cache.so
            #LoadModule cache_disk_module modules/mod_cache_disk.so
            #LoadModule cache_socache_module modules/mod_cache_socache.so
            #LoadModule cern_meta_module modules/mod_cern_meta.so
            LoadModule cgi_module modules/mod_cgi.so
            #LoadModule charset_lite_module modules/mod_charset_lite.so
            #LoadModule data_module modules/mod_data.so
            #LoadModule dav_module modules/mod_dav.so
            #LoadModule dav_fs_module modules/mod_dav_fs.so
            LoadModule dav_lock_module modules/mod_dav_lock.so
            #LoadModule dbd_module modules/mod_dbd.so
            #LoadModule deflate_module modules/mod_deflate.so
            LoadModule dir_module modules/mod_dir.so
            #LoadModule dumpio_module modules/mod_dumpio.so
            LoadModule env_module modules/mod_env.so
            #LoadModule expires_module modules/mod_expires.so
            #LoadModule ext_filter_module modules/mod_ext_filter.so
            #LoadModule file_cache_module modules/mod_file_cache.so
            #LoadModule filter_module modules/mod_filter.so
            #LoadModule http2_module modules/mod_http2.so
            LoadModule headers_module modules/mod_headers.so
            #LoadModule heartbeat_module modules/mod_heartbeat.so
            #LoadModule heartmonitor_module modules/mod_heartmonitor.so
            #LoadModule ident_module modules/mod_ident.so
            #LoadModule imagemap_module modules/mod_imagemap.so
            LoadModule include_module modules/mod_include.so
            LoadModule info_module modules/mod_info.so
            LoadModule isapi_module modules/mod_isapi.so
            #LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
            #LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
            #LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
            #LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
            #LoadModule ldap_module modules/mod_ldap.so
            #LoadModule logio_module modules/mod_logio.so
            LoadModule log_config_module modules/mod_log_config.so
            #LoadModule log_debug_module modules/mod_log_debug.so
            #LoadModule log_forensic_module modules/mod_log_forensic.so
            #LoadModule lua_module modules/mod_lua.so
            LoadModule cache_disk_module modules/mod_cache_disk.so
            #LoadModule macro_module modules/mod_macro.so
            LoadModule mime_module modules/mod_mime.so
            #LoadModule mime_magic_module modules/mod_mime_magic.so
            LoadModule negotiation_module modules/mod_negotiation.so
            LoadModule proxy_module modules/mod_proxy.so
            LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
            #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
            #LoadModule proxy_connect_module modules/mod_proxy_connect.so
            #LoadModule proxy_express_module modules/mod_proxy_express.so
            #LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
            #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
            #LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
            #LoadModule proxy_html_module modules/mod_proxy_html.so
            #LoadModule proxy_http_module modules/mod_proxy_http.so
            #LoadModule proxy_http2_module modules/mod_proxy_http2.so
            #LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
            #LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
            #LoadModule ratelimit_module modules/mod_ratelimit.so
            #LoadModule reflector_module modules/mod_reflector.so
            #LoadModule remoteip_module modules/mod_remoteip.so
            #LoadModule request_module modules/mod_request.so
            #LoadModule reqtimeout_module modules/mod_reqtimeout.so
            LoadModule rewrite_module modules/mod_rewrite.so
            #LoadModule sed_module modules/mod_sed.so
            #LoadModule session_module modules/mod_session.so
            #LoadModule session_cookie_module modules/mod_session_cookie.so
            #LoadModule session_crypto_module modules/mod_session_crypto.so
            #LoadModule session_dbd_module modules/mod_session_dbd.so
            LoadModule setenvif_module modules/mod_setenvif.so
            #LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
            #LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
            #LoadModule socache_dbm_module modules/mod_socache_dbm.so
            #LoadModule socache_memcache_module modules/mod_socache_memcache.so
            LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
            #LoadModule speling_module modules/mod_speling.so
            LoadModule ssl_module modules/mod_ssl.so
            LoadModule status_module modules/mod_status.so
            #LoadModule substitute_module modules/mod_substitute.so
            #LoadModule unique_id_module modules/mod_unique_id.so
            #LoadModule userdir_module modules/mod_userdir.so
            #LoadModule usertrack_module modules/mod_usertrack.so
            LoadModule version_module modules/mod_version.so
            #LoadModule vhost_alias_module modules/mod_vhost_alias.so
            #LoadModule watchdog_module modules/mod_watchdog.so
            #LoadModule xml2enc_module modules/mod_xml2enc.so

            <IfModule unixd_module>
            #
            # If you wish httpd to run as a different user or group, you must run
            # httpd as root initially and it will switch.  
            #
            # User/Group: The name (or #number) of the user/group to run httpd as.
            # It is usually good practice to create a dedicated user and group for
            # running httpd, as with most system services.
            #
            User daemon
            Group daemon

            </IfModule>

            # 'Main' server configuration
            #
            # The directives in this section set up the values used by the 'main'
            # server, which responds to any requests that aren't handled by a
            # <VirtualHost> definition.  These values also provide defaults for
            # any <VirtualHost> containers you may define later in the file.
            #
            # All of these directives may appear inside <VirtualHost> containers,
            # in which case these default settings will be overridden for the
            # virtual host being defined.
            #

            #
            # ServerAdmin: Your address, where problems with the server should be
            # e-mailed.  This address appears on some server-generated pages, such
            # as error documents.  e.g. admin@your-domain.com
            #
            ServerAdmin postmaster@localhost

            #
            # ServerName gives the name and port that the server uses to identify itself.
            # This can often be determined automatically, but we recommend you specify
            # it explicitly to prevent problems during startup.
            #
            # If your host doesn't have a registered DNS name, enter its IP address here.
            #
            ServerName localhost:80

            #
            # Deny access to the entirety of your server's filesystem. You must
            # explicitly permit access to web content directories in other 
            # <Directory> blocks below.
            #
            <Directory />
                AllowOverride none
                Require all denied
            </Directory>

            #
            # Note that from this point forward you must specifically allow
            # particular features to be enabled - so if something's not working as
            # you might expect, make sure that you have specifically enabled it
            # below.
            #

            #
            # DocumentRoot: The directory out of which you will serve your
            # documents. By default, all requests are taken from this directory, but
            # symbolic links and aliases may be used to point to other locations.
            #
            DocumentRoot "E:/xampp/htdocs"
            <Directory "E:/xampp/htdocs">
                #
                # Possible values for the Options directive are "None", "All",
                # or any combination of:
                #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
                #
                # Note that "MultiViews" must be named *explicitly* --- "Options All"
                # doesn't give it to you.
                #
                # The Options directive is both complicated and important.  Please see
                # http://httpd.apache.org/docs/2.4/mod/core.html#options
                # for more information.
                #
                Options Indexes FollowSymLinks Includes ExecCGI

                #
                # AllowOverride controls what directives may be placed in .htaccess files.
                # It can be "All", "None", or any combination of the keywords:
                #   AllowOverride FileInfo AuthConfig Limit
                #
                AllowOverride All

                #
                # Controls who can get stuff from this server.
                #
                Require all granted
            </Directory>

            #
            # DirectoryIndex: sets the file that Apache will serve if a directory
            # is requested.
            #
            <IfModule dir_module>
                DirectoryIndex index.php index.pl index.cgi index.asp index.shtml index.html index.htm \
                               default.php default.pl default.cgi default.asp default.shtml default.html default.htm \
                               home.php home.pl home.cgi home.asp home.shtml home.html home.htm
            </IfModule>

            #
            # The following lines prevent .htaccess and .htpasswd files from being 
            # viewed by Web clients. 
            #
            <Files ".ht*">
                Require all denied
            </Files>

            #
            # ErrorLog: The location of the error log file.
            # If you do not specify an ErrorLog directive within a <VirtualHost>
            # container, error messages relating to that virtual host will be
            # logged here.  If you *do* define an error logfile for a <VirtualHost>
            # container, that host's errors will be logged there and not here.
            #
            ErrorLog "logs/error.log"

            #
            # LogLevel: Control the number of messages logged to the error_log.
            # Possible values include: debug, info, notice, warn, error, crit,
            # alert, emerg.
            #
            LogLevel warn

            <IfModule log_config_module>
                #
                # The following directives define some format nicknames for use with
                # a CustomLog directive (see below).
                #
                LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
                LogFormat "%h %l %u %t \"%r\" %>s %b" common

                <IfModule logio_module>
                  # You need to enable mod_logio.c to use %I and %O
                  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
                </IfModule>

                #
                # The location and format of the access logfile (Common Logfile Format).
                # If you do not define any access logfiles within a <VirtualHost>
                # container, they will be logged here.  Contrariwise, if you *do*
                # define per-<VirtualHost> access logfiles, transactions will be
                # logged therein and *not* in this file.
                #
                #CustomLog "logs/access.log" common

                #
                # If you prefer a logfile with access, agent, and referer information
                # (Combined Logfile Format) you can use the following directive.
                #
                CustomLog "logs/access.log" combined
            </IfModule>

            <IfModule alias_module>
                #
                # Redirect: Allows you to tell clients about documents that used to 
                # exist in your server's namespace, but do not anymore. The client 
                # will make a new request for the document at its new location.
                # Example:
                # Redirect permanent /foo http://www.example.com/bar

                #
                # Alias: Maps web paths into filesystem paths and is used to
                # access content that does not live under the DocumentRoot.
                # Example:
                # Alias /webpath /full/filesystem/path
                #
                # If you include a trailing / on /webpath then the server will
                # require it to be present in the URL.  You will also likely
                # need to provide a <Directory> section to allow access to
                # the filesystem path.

                #
                # ScriptAlias: This controls which directories contain server scripts. 
                # ScriptAliases are essentially the same as Aliases, except that
                # documents in the target directory are treated as applications and
                # run by the server when requested rather than as documents sent to the
                # client.  The same rules about trailing "/" apply to ScriptAlias
                # directives as to Alias.
                #
                ScriptAlias /cgi-bin/ "E:/xampp/cgi-bin/"

            </IfModule>

            <IfModule cgid_module>
                #
                # ScriptSock: On threaded servers, designate the path to the UNIX
                # socket used to communicate with the CGI daemon of mod_cgid.
                #
                #Scriptsock cgisock
            </IfModule>

            #
            # "E:/xampp/cgi-bin" should be changed to whatever your ScriptAliased
            # CGI directory exists, if you have that configured.
            #
            <Directory "E:/xampp/cgi-bin">
                AllowOverride All
                Options None
                Require all granted
            </Directory>

0 个答案:

没有答案