<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理

    Unix domain socket和memcached

    Posted on 2009-10-15 06:12 dennis 閱讀(5389) 評(píng)論(0)  編輯  收藏 所屬分類: java 、unix網(wǎng)絡(luò)編程
        unix域協(xié)議并不是一個(gè)實(shí)際的協(xié)議族,而是在單個(gè)主機(jī)上執(zhí)行客戶/服務(wù)器通信的一種方法,是IPC的方法之一,特定于*nix平臺(tái)。使用unix domain socket有三個(gè)好處:
    1)在同一主機(jī)上,unix domain socket比一般的tcp socket快上一倍,性能因素這是一個(gè)主要原因。
    2)unix domain socket可以在同一主機(jī)的不同進(jìn)程之間傳遞文件描述符
    3)較新的unix domain socket實(shí)現(xiàn)把客戶的ID和組ID提供給服務(wù)器,可以讓服務(wù)器作安全檢查。

       memcached的FAQ中也提到為了安全驗(yàn)證,可以考慮讓memcached監(jiān)聽(tīng)unix domain socket。Memcached支持這一點(diǎn),可以通過(guò)-s選項(xiàng)指定unix domain socket的路徑名,注意,為了可移植性,盡量使用絕對(duì)路徑,因?yàn)镻osix標(biāo)準(zhǔn)聲稱給unix domain socket綁定相對(duì)路徑將導(dǎo)致不可預(yù)計(jì)的后果,我在linux的測(cè)試是可以使用相對(duì)路徑。假設(shè)我將memcached綁定到/home/dennis/memcached,可以這樣啟動(dòng)memcached:

    memcached -s /home/dennis/memcached


    端口呢?沒(méi)有端口了,/home/dennis/memcached這個(gè)文件你可以理解成FIFO的管道,unix domain socket的server/client通過(guò)這個(gè)管道通訊。

       libmemcached支持通過(guò)unix domain socket來(lái)訪問(wèn)memcached,基于libmemcached實(shí)現(xiàn)的client應(yīng)該都可以使用這一功能。目前來(lái)看,java平臺(tái)由于不支持平臺(tái)相關(guān)的unix domain socket,因此無(wú)法享受memcached的這一特性。

       不過(guò)有一個(gè)開(kāi)源項(xiàng)目通過(guò)jni支持實(shí)現(xiàn)了unix domain socket,這個(gè)項(xiàng)目稱為juds。核心類就三個(gè),使用非常簡(jiǎn)單。下載文件后,解壓縮,make & make install即可。注意,Makefile中寫(xiě)死了JAVA_HOME,手工修改即可??匆粋€(gè)例子,經(jīng)典的Time server:
    package com.google.code.juds.test;

    import java.io.IOException;

    import com.google.code.juds.*;
    import java.io.*;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class TimeServer {
        
    public static void main(String[] args) {
            
    try {
                UnixDomainSocketServer server 
    = new UnixDomainSocketServer(
                        
    "/home/dennis/time", UnixDomainSocket.SOCK_STREAM);
                OutputStream output 
    = server.getOutputStream();
                 Date date 
    = new Date();
                 DateFormat dateFormat 
    = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                output.write(dateFormat.format(date).getBytes());
            } 
    catch (IOException e) {
                        e.printStackTrace();
            }

        }

    }

        通過(guò)UnixDomainSocketServer創(chuàng)建server,指定類型為SOCK_STREAM,juds也支持UDP類型。client的使用如下:
            byte[] b = new byte[128];
           
    UnixDomainSocketClient socket = new UnixDomainSocketClient("/home/dennis/time",
                    UnixDomainSocket.SOCK_STREAM);
            InputStream in 
    = socket.getInputStream();
            in.read(b);
            System.out.println(
    "Text received: \"" + new String(b) + "\"");
            socket.close();
        顯然,juds還只支持阻塞IO,考慮可進(jìn)一步使用select、poll來(lái)擴(kuò)展實(shí)現(xiàn)非阻塞IO。

        最后一個(gè)例子,通過(guò)juds訪問(wèn)memcached的unix domain socket,簡(jiǎn)單的version協(xié)議調(diào)用:
    byte[] b = new byte[128];
            UnixDomainSocketClient socket 
    = new UnixDomainSocketClient("/home/dennis/memcached",
                    UnixDomainSocket.SOCK_STREAM);
            OutputStream out 
    = socket.getOutputStream();
            String text 
    = "version\r\n";
            out.write(text.getBytes());
            InputStream in 
    = socket.getInputStream();
            in.read(b);
            System.out.println(
    "Text received: \"" + new String(b) + "\"");
            socket.close();
       輸出
         Text received: "VERSION 1.4.1"
    主站蜘蛛池模板: 亚洲专区一路线二| 亚洲AV电影院在线观看| 亚洲午夜无码毛片av久久京东热| 久久国产精品免费专区| 亚洲av无码国产精品色午夜字幕| 免费国产叼嘿视频大全网站 | 日韩免费高清一级毛片在线| 亚洲精品午夜国产va久久| 成年大片免费视频| 亚洲欧美日韩国产精品一区| 国产片免费在线观看| 一级毛片成人免费看a| 亚洲精品狼友在线播放| 久久99国产综合精品免费| 亚洲人成综合在线播放| 性一交一乱一视频免费看| 黄色毛片视频免费| 亚洲熟妇无码八AV在线播放| 一区二区在线免费观看| 日本亚洲精品色婷婷在线影院| 午夜毛片不卡免费观看视频| 欧洲乱码伦视频免费国产| 亚洲熟妇无码八AV在线播放| 亚洲精品视频免费在线观看| 亚洲日韩中文字幕一区| 亚洲国产午夜中文字幕精品黄网站| 中国性猛交xxxxx免费看| 亚洲白色白色永久观看| 女性无套免费网站在线看| 日韩精品无码免费视频| 午夜影视日本亚洲欧洲精品一区| 亚洲精品国产免费| 日韩在线视频线视频免费网站| 亚洲av永久无码精品秋霞电影影院| 亚欧在线精品免费观看一区| 亚洲av无码专区国产不乱码| 亚洲乱码国产一区三区| 性色av无码免费一区二区三区| www成人免费视频| 亚洲a级在线观看| 国产亚洲av片在线观看18女人|